Skip to content

Commit 7a8ff59

Browse files
committed
Update to make documentation working with Sphinx i18n system in order to facilitate translation process
1 parent 67d8dda commit 7a8ff59

File tree

6 files changed

+192
-2
lines changed

6 files changed

+192
-2
lines changed

Makefile

Lines changed: 85 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ SPHINXOPTS =
99
SPHINXBUILD = sphinx-build
1010
PAPER =
1111
TRANSLATIONS = de fr it es zh_cn
12+
TRANSLATIONI18N =
1213
LANGUAGES = en $(TRANSLATIONS)
1314

1415
# On mapserver.org we need to write alternate links for the language switcher.
@@ -20,14 +21,21 @@ LANGUAGES = en $(TRANSLATIONS)
2021
# Internal variables.
2122
PAPEROPT_a4 = -D latex_paper_size=a4
2223
PAPEROPT_letter = -D latex_paper_size=letter
23-
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees/$$lang $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) -c . -A language=$$lang -D language=$$lang -A target=$(TARGET) -A languages='$(LANGUAGES)'
24+
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees/$$lang $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) -c . -A language=$$lang -D language=$$lang -A target=$(TARGET) -A languages='$(LANGUAGES) $(TRANSLATIONI18N)'
25+
26+
ALLSPHINXOPTSI18N = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) -c . -a -A language=$$lang -D language=$$lang -A target=$(TARGET) -A languages='$(LANGUAGES) $(TRANSLATIONI18N)'
27+
28+
# Only for Gettext
29+
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) -c . -A language=en -D language=en -A target=$(TARGET) -A languages='en'
2430

2531
.PHONY: help clean html web pickle htmlhelp latex changes linkcheck
2632

2733
help:
2834
@echo "Please use \`make <target>' where <target> is one of"
2935
@echo " html to make standalone HTML files"
30-
@echo " init to preprocess translation directories"
36+
@echo " init to preprocess translation directories"
37+
@echo " compile_messages to compile po to mo files"
38+
@echo " generate_po_from_tmpl to duplicate pot to po files for a language, e.g from translated\pot directory to translated\lang"
3139
@echo " pickle to make pickle files"
3240
@echo " json to make JSON files"
3341
@echo " htmlhelp to make HTML files and a HTML help project"
@@ -36,6 +44,8 @@ help:
3644
@echo " all-ps to make PS file"
3745
@echo " changes to make an overview over all changed/added/deprecated items"
3846
@echo " linkcheck to check all external links for integrity"
47+
@echo " gettext to generate pot files from en rst files"
48+
@echo " gettext_copy to duplicate pot files from gettext dir to translated\pot"
3949

4050
clean:
4151
-rm -rf $(BUILDDIR)/*
@@ -59,22 +69,68 @@ init:
5969
done
6070
@echo "Init finished. Other target can now be build.";\
6171

72+
compile_messages:
73+
@for lang in $(TRANSLATIONI18N) ;\
74+
do \
75+
echo "Compiling messages for $$lang..."; \
76+
for f in `find ./translated/$$lang -name \*.po -printf "%f\n"`; \
77+
do \
78+
echo "Compiling messages for $$f"; \
79+
msgfmt ./translated/$$lang/$$f -o ./translated/$$lang/LC_MESSAGES/$${f%.*}.mo; \
80+
done; \
81+
done
82+
@echo "Messages compiled. Now you can build updated version for html and pdf.";\
83+
84+
generate_po_from_tmpl:
85+
@for lang in $(TRANSLATIONI18N) ;\
86+
do \
87+
echo "Generate po files from pot files for $$lang..."; \
88+
for f in `find ./translated/pot/ -name \*.pot -printf "%f\n"`; \
89+
do \
90+
echo "Copy pot files to po file for $$f"; \
91+
cp ./translated/pot/$$f ./translated/$$lang/$${f%.*}.po; \
92+
done; \
93+
done
94+
@echo "*.pot files copy to *.po files. Now you can start your translation.";\
95+
6296
html:
6397
@for lang in $(LANGUAGES);\
6498
do \
6599
mkdir -p $(BUILDDIR)/html/$$lang $(BUILDDIR)/doctrees/$$lang; \
66100
echo "$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $$lang $(BUILDDIR)/html/$$lang";\
67101
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $$lang $(BUILDDIR)/html/$$lang;\
68102
done
103+
@for lang in $(TRANSLATIONI18N);\
104+
do \
105+
echo "$(SPHINXBUILD) -b html $(ALLSPHINXOPTSI18N) en build/html/$$lang";\
106+
$(SPHINXBUILD) -b html $(ALLSPHINXOPTSI18N) en build/html/$$lang;\
107+
done
69108
@echo
70109
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html/<language>.";\
71110

111+
gettext:
112+
mkdir -p $(BUILDDIR)/gettext/en $(BUILDDIR)/doctrees/en; \
113+
echo "$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) en $(BUILDDIR)/gettext/en";\
114+
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) en $(BUILDDIR)/gettext/en;\
115+
116+
@echo "Build finished. The pot files pages are in $(BUILDDIR)/gettext/en.";\
117+
118+
gettext_copy:
119+
cp $(BUILDDIR)/gettext/en/*.pot translated/pot/; \
120+
121+
@echo "Build finished. The pot files pages are in $(BUILDDIR)/gettext/en.";\
122+
72123
singlehtml:
73124
@for lang in $(LANGUAGES);\
74125
do \
75126
mkdir -p $(BUILDDIR)/singlehtml/$$lang $(BUILDDIR)/doctrees/$$lang; \
76127
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $$lang $(BUILDDIR)/singlehtml/$$lang;\
77128
done
129+
@for lang in $(TRANSLATIONI18N);\
130+
do \
131+
mkdir -p $(BUILDDIR)/singlehtml/$$lang $(BUILDDIR)/doctrees/$$lang; \
132+
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTSI18N) en $(BUILDDIR)/singlehtml/$$lang;\
133+
done
78134
@echo
79135
@echo "Build finished. The HTML pages are in $(BUILDDIR)/singlehtml/<language>.";\
80136

@@ -84,6 +140,11 @@ pickle:
84140
mkdir -p $(BUILDDIR)/pickle/$$lang $(BUILDDIR)/doctrees/$$lang; \
85141
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $$lang $(BUILDDIR)/pickle/$$lang;\
86142
done
143+
@for lang in $(TRANSLATIONI18N);\
144+
do \
145+
mkdir -p $(BUILDDIR)/pickle/$$lang $(BUILDDIR)/doctrees/$$lang; \
146+
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTSI18N) en $(BUILDDIR)/pickle/$$lang;\
147+
done
87148
@echo
88149
@echo "Build finished; now you can process the pickle files."
89150

@@ -95,6 +156,11 @@ json:
95156
mkdir -p $(BUILDDIR)/json/$$lang $(BUILDDIR)/doctrees/$$lang; \
96157
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $$lang $(BUILDDIR)/json/$$lang;\
97158
done
159+
@for lang in $(TRANSLATIONI18N);\
160+
do \
161+
mkdir -p $(BUILDDIR)/json/$$lang $(BUILDDIR)/doctrees/$$lang; \
162+
$(SPHINXBUILD) -b json $(ALLSPHINXOPTSI18N) en $(BUILDDIR)/json/$$lang;\
163+
done
98164
@echo
99165
@echo "Build finished; now you can process the JSON files."
100166

@@ -114,6 +180,11 @@ latex:
114180
mkdir -p $(BUILDDIR)/latex/$$lang $(BUILDDIR)/doctrees/$$lang; \
115181
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $$lang $(BUILDDIR)/latex/$$lang;\
116182
done
183+
@for lang in $(TRANSLATIONI18N);\
184+
do \
185+
mkdir -p $(BUILDDIR)/latex/$$lang $(BUILDDIR)/doctrees/$$lang; \
186+
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTSI18N) en $(BUILDDIR)/latex/$$lang;\
187+
done
117188
@echo
118189
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex/<language>."\
119190
@echo "Run \`make all-pdf' or \`make all-ps'"
@@ -124,6 +195,11 @@ pdf:
124195
mkdir -p $(BUILDDIR)/pdf/$$lang $(BUILDDIR)/doctrees/$$lang; \
125196
$(SPHINXBUILD) -b pdf $(ALLSPHINXOPTS) $$lang $(BUILDDIR)/pdf/$$lang;\
126197
done
198+
@for lang in $(TRANSLATIONI18N);\
199+
do \
200+
mkdir -p $(BUILDDIR)/pdf/$$lang $(BUILDDIR)/doctrees/$$lang; \
201+
$(SPHINXBUILD) -b pdf $(ALLSPHINXOPTSI18N) en $(BUILDDIR)/pdf/$$lang;\
202+
done
127203
@echo
128204
@echo "Build finished; the PDF files are in $(BUILDDIR)/pdf/<language>."\
129205
@echo "Run \`make pdf' "
@@ -146,6 +222,13 @@ all-pdf:
146222
mv -f $(BUILDDIR)/latex/$$lang/MapServer.pdf $(BUILDDIR)/html/$$lang ; \
147223
fi \
148224
done
225+
@for lang in $(TRANSLATIONI18N);\
226+
do \
227+
/usr/bin/make -C $(BUILDDIR)/latex/$$lang all-pdf ; \
228+
if [ -d $(BUILDDIR)/html/$$lang ]; then \
229+
mv -f $(BUILDDIR)/latex/$$lang/MapServer.pdf $(BUILDDIR)/html/$$lang ; \
230+
fi \
231+
done
149232

150233
all-ps:
151234
@for lang in $(LANGUAGES);\

conf.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,9 @@
258258
# A list of files that should not be packed into the epub file.
259259
#epub_exclude_files = []
260260

261+
# Path for sphinx to find *.mo files for translation
262+
locale_dirs = ['../translated']
263+
261264
from pygments.lexer import RegexLexer, bygroups,combined, include
262265
from pygments.token import *
263266
from pygments import highlight

i18n_win.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#! /usr/bin/env python
2+
# -*- coding: iso-8859-1 -*-
3+
4+
import os
5+
import sys
6+
import glob
7+
# Add path to be able to append msgfmt as a module
8+
i18n_utils_path = os.path.join(os.path.dirname(sys.executable), "Tools", "i18n")
9+
sys.path.append(i18n_utils_path)
10+
import msgfmt
11+
12+
from optparse import OptionParser
13+
14+
def main():
15+
parser = OptionParser(usage="usage: %prog [options]",
16+
version="%prog 1.0")
17+
parser.add_option("-l", "--lang",
18+
action="store", # optional because action defaults to "store"
19+
dest="lang",
20+
help="Choose a language for compiling *.po files to *.mo",)
21+
(options, args) = parser.parse_args()
22+
23+
if len(args) != 0:
24+
parser.error("wrong number of arguments, you only have to use lang option")
25+
26+
os.chdir(os.path.join(os.getcwd(), "translated", options.lang))
27+
for filename in glob.glob("*.po"):
28+
msgfmt.make(filename, os.path.join("LC_MESSAGES", filename.split(".")[0] + ".mo"))
29+
30+
31+
if __name__ == '__main__':
32+
main()
33+

make.bat

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,22 @@ setlocal enableextensions enabledelayedexpansion
66

77
REM ...build a list of directories to be processed (language directories)
88
SET TRANSLATIONS=de es fr zh_cn
9+
SET TRANSLATIONI18N=
910
SET LANGUAGES=en %TRANSLATIONS%
1011

1112
set SPHINXBUILD=sphinx-build
1213
set ALLSPHINXOPTS= -d _build/doctrees/%%L -c . -A language=%%L -D language=%%L -A languages="%LANGUAGES%"
14+
set ALLSPHINXOPTSI18N= -d _build/doctrees/%%L -c . -A language=%%L -D language=%%L -A languages="%LANGUAGES% %TRANSLATIONI18N%"
15+
1316
if NOT "%PAPER%" == "" (
1417
set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
18+
set ALLSPHINXOPTSI18N=-D latex_paper_size=%PAPER% %ALLSPHINXOPTSI18N%
1519
)
1620

21+
REM Only for Gettext
22+
set I18NSPHINXOPTS = -D latex_paper_size=%PAPER% -d _build/doctrees/en -c . -A language=en -D language=en -A languages="en"
23+
24+
1725
if "%1" == "" goto help
1826

1927
if "%1" == "help" (
@@ -22,6 +30,10 @@ if "%1" == "help" (
2230
echo. init to preprocess translation directories
2331
echo. html to make standalone HTML files
2432
echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter
33+
echo. gettext to generate pot files from en rst files
34+
echo. gettext_copy to duplicate pot files from gettext dir to translated\pot
35+
echo. compile_messages to compile po to mo files
36+
echo. generate_po_from_tmpl to duplicate pot to po files for a language, e.g from translated\pot directory to translated\lang
2537
echo. changes to make an overview over all changed/added/deprecated items
2638
echo. linkcheck to check all external links for integrity
2739
goto end
@@ -45,6 +57,9 @@ if "%1" == "html" (
4557
FOR %%L in (%LANGUAGES%) DO (
4658
%SPHINXBUILD% -b html %ALLSPHINXOPTS% %%L _build/html/%%L
4759
)
60+
FOR %%L in (%TRANSLATIONI18N%) DO (
61+
%SPHINXBUILD% -b html %ALLSPHINXOPTSI18N% en _build/html/%%L
62+
)
4863
echo.
4964
echo.Build finished. The HTML pages are in _build/html.
5065
goto end
@@ -54,11 +69,67 @@ if "%1" == "latex" (
5469
FOR %%L in (%LANGUAGES%) DO (
5570
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %%L _build/latex/%%L
5671
)
72+
FOR %%L in (%TRANSLATIONI18N%) DO (
73+
%SPHINXBUILD% -b latex %ALLSPHINXOPTSI18N% en _build/latex/%%L
74+
)
5775
echo.
5876
echo.Build finished; the LaTeX files are in _build/latex.
5977
goto end
6078
)
6179

80+
if "%1" == "gettext" (
81+
mkdir _build\gettext\en
82+
mkdir _build\doctrees\en
83+
%SPHINXBUILD% -b gettext %ALLSPHINXOPTS% en _build/gettext/en
84+
)
85+
86+
if "%1" == "gettext_copy" (
87+
xcopy _build\gettext\en translated\pot /y /s /e
88+
)
89+
90+
if "%1" == "compile_messages" (
91+
REM Add text below in C:\PythonXX\Lib\site-packages\sitecustomize.py if you get an error about encoding
92+
REM and/or python -c "import sys;print sys.getdefaultencoding()" send you ascii (or fail on accents)
93+
94+
REM #!/usr/bin/env python
95+
REM # -*- coding: iso-8859-1 -*-
96+
97+
REM # Retrieve default 'locale'.
98+
REM import locale, sys
99+
REM loc = locale.getdefaultlocale()
100+
REM if loc[1]:
101+
REM encoding = loc[1]
102+
103+
REM # A non-Unicode version will return AttributeError...
104+
REM if encoding:
105+
REM sys.setdefaultencoding(encoding)
106+
if "%2" == "" (
107+
FOR %%L in (%TRANSLATIONI18N%) DO (
108+
python i18n_win.py --lang %%L
109+
)
110+
echo.
111+
echo.Messages compiled using TRANSLATIONI18N for lang. Now you can build updated version for html and pdf.
112+
) else (
113+
FOR %%L in (%2) DO (
114+
python i18n_win.py --lang %%L
115+
)
116+
echo.
117+
echo.Messages compiled using command line var for lang. Now you can build updated version for html and pdf.
118+
)
119+
goto end
120+
)
121+
122+
if "%1" == "generate_po_from_tmpl" (
123+
if "%2" NEQ "" (
124+
FOR %%L in (%2%) DO (
125+
xcopy translated\pot\*.pot translated\%%L\*.po /s /e
126+
)
127+
echo.
128+
echo."*.pot files copy to *.po files. Now you can start your translation."
129+
)
130+
goto end
131+
)
132+
62133
if "%1" == "changes" (
63134
FOR %%L in (%LANGUAGES%) DO (
64135
%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %%L _build/changes/%%L

translated/fr/LC_MESSAGES/empty

Whitespace-only changes.

translated/pot/empty

Whitespace-only changes.

0 commit comments

Comments
 (0)