From e297b1a477754e45098eaf4d12b23aef3be79f2e Mon Sep 17 00:00:00 2001 From: Chris Mayo Date: Mon, 22 Nov 2021 19:30:33 +0000 Subject: [PATCH] Stop including binary translation catalogs in the source Makes it easier to contribute and accept translations. Does add a new dependency on installation from source, polib. This is not made mandatory because not all users will want translations. polib has no further dependencies and can be installed anywhere LinkChecker can, using pip too. Add release process step to check polib is installed The Wheel still includes translations. Recommend install from PyPI in the README. Translations were being compiled in setup.py until 2014, using a bundled copy of msgfmt.py. 9c3739f1c ("Replace msgfmt.py with local tools.", 2014-09-08) --- .gitignore | 1 + MANIFEST.in | 1 - README.rst | 11 +++--- doc/changelog.txt | 8 +++++ doc/development.md | 10 +++--- doc/install.txt | 27 +++++++++++---- doc/src/index.rst | 8 +++-- doc/translations.md | 11 ++++-- doc/upgrading.txt | 5 +++ po/Makefile | 14 ++------ po/de.mo | Bin 32985 -> 0 bytes po/es.mo | Bin 6195 -> 0 bytes po/fr.mo | Bin 5177 -> 0 bytes setup.py | 79 ++++++++++++++++++++------------------------ 14 files changed, 99 insertions(+), 76 deletions(-) delete mode 100644 po/de.mo delete mode 100644 po/es.mo delete mode 100644 po/fr.mo diff --git a/.gitignore b/.gitignore index 0349bb6f..afb63af6 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ *.o *.lo *.la +*.mo *~ *.so *.bak diff --git a/MANIFEST.in b/MANIFEST.in index 68db17d5..0c87f836 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -44,7 +44,6 @@ recursive-include doc \ Makefile \ linkcheckerrc_* recursive-include po \ - *.mo \ *.po \ *.pot \ Makefile diff --git a/README.rst b/README.rst index f0be7083..7bccc880 100644 --- a/README.rst +++ b/README.rst @@ -28,13 +28,16 @@ Features Installation ------------- -See `doc/install.txt`_ in the source code archive for general information. Except the given information there, please take note of the following: +Python 3.6 or later is needed. Using pip to install LinkChecker: + +``pip3 install linkchecker`` + +The version in the pip repository may be old, to find out how to get the latest +code, plus platform-specific information and other advice see `doc/install.txt`_ +in the source code archive. .. _doc/install.txt: doc/install.txt -Python 3.6 or later is needed. - -The version in the pip repository may be old. Instead, you can use pip to install the latest code from git: ``pip3 install git+https://github.com/linkchecker/linkchecker.git``. Usage ------ diff --git a/doc/changelog.txt b/doc/changelog.txt index 16512134..43f0b3d4 100644 --- a/doc/changelog.txt +++ b/doc/changelog.txt @@ -1,3 +1,11 @@ +10.x (released x) + +Changes: +- Binary translation catalogs are no longer included with the source. The polib + package must be installed before installation from source to compile + translations. + + 10.0.1 (released 29.1.2021) Changes: diff --git a/doc/development.md b/doc/development.md index c95b71ae..6d1d94a3 100644 --- a/doc/development.md +++ b/doc/development.md @@ -68,10 +68,12 @@ Release process 5. create a new git clone -6. build Python distribution files (`setup.py sdist bdist_wheel`) +6. check Python polib package is installed -7. check distribution files (`twine check dist/*`) and upload to PyPI (`twine upload dist/*`) +7. build Python distribution files (`setup.py sdist bdist_wheel`) -8. create release (vX.Y.Z) on GitHub (GitHub creates the .tar.gz and .zip archives) +8. check distribution files (`twine check dist/*`) and upload to PyPI (`twine upload dist/*`) -9. increment AppVersion to vX.Y.Z+1.dev0 +9. create release (vX.Y.Z) on GitHub (GitHub creates the .tar.gz and .zip archives) + +10. increment AppVersion to vX.Y.Z+1.dev0 diff --git a/doc/install.txt b/doc/install.txt index eb1b74ba..dbd64b4c 100644 --- a/doc/install.txt +++ b/doc/install.txt @@ -3,10 +3,20 @@ Installation If you are upgrading from older versions of LinkChecker you should also read the upgrading documentation stored in upgrading.txt. +When installing from source, for application translations to be installed +polib_ needs to be installed before LinkChecker. After LinkChecker installation +polib_ can be removed. + +.. _polib: https://pypi.org/project/polib/ + Setup with pip ------------------ -If pip_ is available, this command should install LinkChecker on -the local system: +pip_ can be used to install LinkChecker on the local system. + +If you want application translations, first: +``pip3 install polib`` + +Then this command will install LinkChecker from the latest source: ``pip3 install git+https://github.com/linkchecker/linkchecker.git`` .. _pip: https://pypi.org/project/pip/ @@ -44,20 +54,23 @@ First, install the required software. 3. Python Beautiful Soup package from https://pypi.org/project/beautifulsoup4/ -4. *Optional, for bash-completion:* +4. *Optional, installation time only, for translations:* + polib Python module from https://pypi.org/project/polib/ + +5. *Optional, for bash-completion:* argcomplete Python module from https://pypi.org/project/argcomplete/ -5. *Optional, for displaying country codes:* +6. *Optional, for displaying country codes:* GeoIP from https://pypi.org/project/GeoIP/ -6. *Optional, used for Virus checking:* +7. *Optional, used for Virus checking:* ClamAv from https://www.clamav.net/ -7. *Optional, for GNOME proxy setting parsing:* +8. *Optional, for GNOME proxy setting parsing:* PyGObject and GIO. Best installed from your distribution e.g. ``python3-gi`` -8. *Optional, to run the WSGI web interface:* +9. *Optional, to run the WSGI web interface:* Apache from https://httpd.apache.org/ mod_wsgi from https://pypi.org/project/mod-wsgi/ diff --git a/doc/src/index.rst b/doc/src/index.rst index 3f4bdb2a..5500f83d 100644 --- a/doc/src/index.rst +++ b/doc/src/index.rst @@ -19,9 +19,11 @@ Installation .. code-block:: console - $ pip3 install git+https://github.com/linkchecker/linkchecker.git - -See the :doc:`installation document ` for more information. + $ pip3 install linkchecker + +The version in the pip repository may be old, to find out how to get the latest +code, plus platform-specific information and other advice see the +:doc:`installation document `. Basic usage ------------ diff --git a/doc/translations.md b/doc/translations.md index 63234891..c24039ab 100644 --- a/doc/translations.md +++ b/doc/translations.md @@ -7,16 +7,21 @@ Translations for the man pages are stored in doc/. Application Translations ------------------------ -``linkchecker $ make locale`` +Makefiles using GNU gettext utilities are provided to manage .po and .pot files. -is equivalent to: +If the strings in the application change, update the .pot and .po files: -``linkchecker/po $ make`` +``linkchecker/po $ rm linkchecker.pot; make`` + +Do make a commit at this point. Translation progress and validity can be monitored with: ``linkchecker/po $ make check`` +.mo files are not stored in the repository and are created on building, +using polib. + Man Page Translations --------------------- diff --git a/doc/upgrading.txt b/doc/upgrading.txt index a0cd3762..7f5ad463 100644 --- a/doc/upgrading.txt +++ b/doc/upgrading.txt @@ -1,5 +1,10 @@ Upgrading ========= +Migrating from 10.0 to 10.x +--------------------------- +If installing from source and application translations are needed the Python +polib package is required to be installed before LinkChecker is installed. + Migrating from 9.x to 10.0 -------------------------- Python 3.6 or newer is required. diff --git a/po/Makefile b/po/Makefile index f8d0f3a0..a1fe3cc4 100644 --- a/po/Makefile +++ b/po/Makefile @@ -3,20 +3,13 @@ MSGFMT := msgfmt MSGMERGE := msgmerge POSOURCES = $(shell find ../linkcheck -name \*.py) \ ../linkchecker $(shell python3 -c 'import argparse; print(argparse.__file__)') -LDIR = ../share/locale PACKAGE = linkchecker TEMPLATE = $(PACKAGE).pot MYMAIL := bastian.kleineidam@web.de BUGSURL = https://github.com/linkchecker/linkchecker -LFILE = LC_MESSAGES/$(PACKAGE).mo -# defined language (add new languages here) -LANGUAGES = de fr es -MOFILES = $(wildcard *.mo) +POFILES = $(wildcard *.po) -all: $(MOFILES) - -%.mo: %.po - $(MSGFMT) -c --statistics -o $@ $< +all: $(POFILES) %.po: $(TEMPLATE) $(MSGMERGE) -U --suffix=.bak $@ $< @@ -35,7 +28,6 @@ check: done clean: - @for f in $(LANGUAGES); do rm -f $(LDIR)/$$f/$(LFILE); done - rm -f *.mo *.bak + rm -f *.bak .PHONY: check clean diff --git a/po/de.mo b/po/de.mo deleted file mode 100644 index ebb6452b3ec49cb133afdad5367932feefdcf4b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32985 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 diff --git a/po/fr.mo b/po/fr.mo deleted file mode 100644 index 9d857a0d1292a2dccfde518dafe5c4cbd7995776..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5177 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 vX^am`-wva{oKTG^Zg7%aYj#(%m1I_N(kLx9M<