]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/TRANSLATION
Clean up buildscripts
[lilypond.git] / Documentation / TRANSLATION
1 LILYPOND DOCUMENTATION TRANSLATION
2
3 TABLE OF CONTENTS
4
5 SOURCES
6 GIT
7 REQUIREMENTS
8 WHICH DOCUMENTATION CAN BE TRANSLATED
9 STARTING A TRANSLATION IN A NEW LANGUAGE
10 FILES TO BE TRANSLATED
11 TRANSLATION DETAILED INSTRUCTIONS
12 * LEARNING MANUAL AND OTHER TEXINFO DOCUMENTATION
13 * REFERENCE NOTATION AND PROGRAM USAGE MANUAL
14 * DOCUMENTATION INDEX index.html.in
15 CHECK STATE OF TRANSLATION
16 UPDATE A TRANSLATION
17 POLICY DURING GDP PROCESS
18 MANAGING TRANSLATIONS WITH GIT
19 SOME GIT TIPS
20 DEALING WITH SEVERAL GIT BRANCHES
21 GIT PUSH ACCESS
22 TECHNICAL BACKGROUND
23
24
25 SOURCES
26
27 The sources live in a GIT repository.  Git 1.5.x is required, and
28 latest version available on your platform is always recommended.  To
29 get a fresh version of LilyPond sources run
30
31     mkdir lily ; cd lily ; git init-db ; mkdir .git/remotes
32
33 then write the two following lines to a text file named .git/remotes/trans
34
35 URL: git://git.sv.gnu.org/lilypond.git/
36 Pull: lilypond/translation:refs/remotes/origin/lilypond/translation
37
38 then run
39
40     git fetch trans
41     git checkout -b lilypond/translation origin/lilypond/translation
42
43
44 GIT
45
46 The reader is supposed to be familiar with Git, for example by
47 having experience from lilypond.org translation; see
48 http://git.sv.gnu.org/gitweb/?p=lilypond.git;a=blob_plain;f=README;hb=web/master
49
50 If you do not have this experience, you may want to read the first two
51 chapters of Git User's Manual at
52 http://www.kernel.org/pub/software/scm/git/docs/user-manual.html
53
54
55 REQUIREMENTS
56
57 Working on LilyPond documentation translations requires:
58
59     * python
60     * make
61     * gettext
62
63
64 WHICH DOCUMENTATION CAN BE TRANSLATED
65
66 The makfiles and scripts infrastructure currently supports translation
67 of the following documentation:
68
69     * documentation index (HTML)
70     * user manual and program usage -- Texinfo source, PDF and HTML
71 output; Info output might be added if there is enough demand for it.
72
73
74 STARTING A TRANSLATION IN A NEW LANGUAGE
75
76 At top of the source directory, do
77
78     ./autogen.sh
79
80 or (if you want to install your self-compiled LilyPond locally):
81
82     ./autogen.sh --prefix=$HOME
83
84 If you want to compile LilyPond -- which is almost required to build
85 the docs, but is not required to do translation only -- fix all
86 dependencies and rerun ./configure (with the same options as for
87 autogen).
88
89 Cd into Documentation and run:
90
91     make ISOLANG=<MY-LANGUAGE> new-lang
92
93 where <MY-LANGUAGE> is the ISO 639 language code.
94
95 Add a language definition for your language in
96 python/langdefs.py.
97
98 See next section about what files to translate and the following
99 detailed instructions after the next section.
100
101
102 FILES TO BE TRANSLATED
103
104 All the following files are in Documentation/
105 Translation of Documentation/foo/bar should be
106 Documentation/<LANG>/foo/bar.
107 Unmentioned files should not be translated.
108
109 Priorities:
110   1. delivery
111   2. 3. 4. 5. later
112   6. optional
113
114 Files marked with priority 3, 4 or 5 may be submitted individually.
115 Word counts (excluding lilypond snippets) are given for each file.
116
117 -1- Documentation index and Tutorial
118 429   user/lilypond-learning.tely
119 6365  user/tutorial.itely
120 23    user/dedication.itely
121 423   user/macros.itexi
122 171   index.html.in
123 6346  po/lilypond-doc.pot (translate to po/<MY_LANGUAGE>.po)
124 ---   ../lilypond-texi2html.init (section TRANSLATIONS)
125 13757 total
126
127 -2- Introduction and beginning of Application Usage
128 411   user/preface.itely
129 3855  user/introduction.itely
130 407   user/lilypond-program.tely
131 1930  user/install.itely (partial translation)
132 1149  user/setup.itely
133 2827  user/running.itely
134 10579 total
135
136 -3- Learning manual
137 10318 user/fundamental.itely -- Fundamental concepts
138 14647 user/tweaks.itely -- Tweaking output
139 3007  user/working.itely -- Working on LilyPond files
140 483   user/templates.itely -- Templates
141 28455 total
142
143 -4- Notation reference
144 695   user/lilypond.tely
145 91    user/notation.itely -- Musical notation
146 3123  user/pitches.itely
147 5013  user/rhythms.itely
148 1146  user/expressive.itely
149 555   user/repeats.itely
150 1455  user/simultaneous.itely
151 1701  user/staff.itely
152 895   user/editorial.itely
153 2286  user/text.itely
154 76    user/specialist.itely -- Specialist notation
155 2670  user/vocal.itely
156 1464  user/chords.itely
157 702   user/piano.itely
158 810   user/percussion.itely
159 826   user/guitar.itely
160 66    user/strings.itely
161 242   user/bagpipes.itely
162 4487  user/ancient.itely
163 5805  user/input.itely -- Input syntax
164 2164  user/non-music.itely -- Non-musical notation
165 8451  user/spacing.itely -- Spacing issues
166 11391 user/changing-defaults.itely -- Changing defaults
167 5202  user/programming-interface.itely -- Interfaces for programmers
168 1190  user/notation-appendices.itely -- Notation manual tables
169 250   user/cheatsheet.itely -- Cheat sheet
170 62756 total
171
172 -5- Application usage
173 3248  user/lilypond-book.itely -- LilyPond-book
174 1171  user/converters.itely -- Converting from other formats
175 4419  total
176
177 -6- Appendices whose translation is optional
178 310   user/literature.itely
179 960   user/scheme-tutorial.itely (needs to be revised first)
180 1270  total
181
182
183 TRANSLATION DETAILED INSTRUCTIONS
184
185 Please follow all these instructions with care to ensure quality work.
186
187 All files should be encoded in UTF-8.
188
189 * LEARNING MANUAL AND OTHER TEXINFO DOCUMENTATION
190
191 Any title which comes with one of the following commands must not be
192 translated directly in the Texinfo source
193
194 @node                                                   @majorheading
195 @chapter       @unnumbered          @appendix           @chapheading
196 @section       @unnumberedsec       @appendixsec        @heading
197 @subsection    @unnumberedsubsec    @appendixsubsec     @subheading
198 @subsubsection @unnumberedsubsubsec @appendixsubsubsec  @subsubheading
199 @ref           @rglos
200
201 As a notable exception, the second argument 'Bar baz' of
202 @ref{Foo,'Bar baz',,info-file} should be translated.
203
204 @uref's names are to be translated.
205
206 In any section which looks like
207
208 @menu
209 * node1:: thing1
210 * node2:: thing2
211 ...
212 @end menu
213
214 the node names (nodeN) are NOT to be translated, whereas extra title
215 information (thingN) is.
216
217 Every node name or section title must from now on be translated
218 separately in a .po file (just as well as LilyPond output messages).
219 This .po file should be in Documentation/po.
220
221
222 Take care of using typographic rules for your language, especially in
223 user/macros.itexi.
224
225
226 Please keep verbatim copies of music snippets (in @lilypond blocs).
227 However, some music snippets containing text that shows in the
228 rendered music, and sometimes translating this text really helps the
229 user to understand the documentation; in this case, and only in this
230 case, you may as an exception translate text in the music snippet, and
231 then you must add a line immediately before the @lilypond block,
232 beginning with
233
234 @c KEEP LY
235
236 Otherwise the music snippet would be reset to the same content as the
237 English version at next 'make snippet-update' run (see UPDATING A
238 TRANSLATION below).
239
240 When you encounter
241
242   @lilypondfile[<number of fragment options>,texidoc]{FILENAME.ly}
243
244 in the source, open input/lsr/FILENAME.ly, translate the `texidoc'
245 header field it contains, enclose it with 'texidoc<MY-LANGUAGE> = "'
246 and '"', and write it into input/texidocs/FILENAME.texidoc -- please
247 keep possibly existing translations in other languages!
248 Additionnally, you may translate the snippet's title in `doctitle'
249 header field, in case `doctitle' is a fragment option used in
250 @lilypondfile; you can do this exactly the same way as `texidoc'.  For
251 instance, input/texidocs/FILENAME.texidoc may contain
252
253 doctitlees = "Spanish title baz"
254 texidoces = "
255 Spanish translation blah
256 "
257 doctitlede = "German title bar"
258 texidocde = "German translation foo
259 "
260
261
262 @example blocs need not be verbatim copies, e.g. variable names,
263 file names and comments should be translated.
264
265 Index entries (@cindex and so on) should be translated.
266
267 Carefully apply every rule exposed in Documentation/README.txt.  If
268 one of these rules conflicts with a rule specific to your language,
269 please ask the Translation meister and/or the Documentation Editor on
270 lilypond-devel@gnu.org.
271
272
273 * REFERENCE NOTATION AND PROGRAM USAGE MANUAL
274
275 Copy user/lilypond.tely (or user/lilypond-program.tely, respectively)
276 into <MY-LANGUAGE>/user, then translate this file and run
277 skeleton-update (see UPDATE A TRANSLATION below).  Your are now ready
278 to translate notation reference (program usage manual, respectively)
279 exactly like the learning manual.
280
281
282 * DOCUMENTATION INDEX index.html.in
283
284 Unlike almost all HTML pages in this documentation, links in this page
285 are not tweaked by add_html_footer.py, so links should be manually
286 edited to link to existing translations.
287
288
289 CHECK STATE OF TRANSLATION
290
291 First pull, then cd into Documentation (or at top of the source tree,
292 replace 'make' with 'make -C Documentation') and run
293
294     make ISOLANG=<MY_LANGUAGE> check-translation
295
296 This presents a diff of the original files since the most recent
297 revision of the translation.  To check a single file, cd into
298 Documentation and run
299
300     make CHECKED_FILES=<MY-LANGUAGE>/user/foo.itely check-translation
301
302
303 Small tip: to see only which files need to be updated, do
304
305     make ISOLANG=<MY_LANGUAGE> check-translation | grep 'diff --git'
306
307 To avoid printing terminal colors control characters, which is often
308 desirable when you redirect output to a file, run
309
310     make ISOLANG=<MY_LANGUAGE> NO_COLOR=1 check-translation
311
312
313 Global state of the translation is recorded in
314 Documentation/translations.html.in, which is used to generate
315 Translations status page.  To update that page, do from Documentation/
316
317     make translation-status
318
319 This will also leave out/translations-status.txt, which contains
320 up-to-dateness percentages for each translated file, and update word
321 counts of documentation files in this file.
322
323
324 UPDATE A TRANSLATION
325
326 Instead of running check-translation, you can run update-translation,
327 which will run your favorite text editor to update files.  First, make
328 sure environment variable EDITOR is set to a text editor command, then
329 run from Documentation
330
331     make ISOLANG=<MY-LANGUAGE> update-translation
332
333 or to update a single file
334
335     make CHECKED_FILES=<MY-LANGUAGE>/user/foo.itely update-translation
336
337 For each file to be udpated, update-translation will open your text
338 editor with this file and a diff of the file in English; if the diff
339 cannot be generated or is bigger than the file in English itself, the
340 full file in English will be opened instead.
341
342 Texinfo skeleton files, i.e. .itely files not yet translated,
343 containing only the Texinfo structure can be updated automatically:
344 whenever 'make check-translation' shows that such files should be
345 updated, run from Documentation
346
347     make ISOLANG=<MY_LANGUAGE> skeleton-update
348
349 .po message catalogs in Documentation/po may be updated with (from
350 Documentation or Documentation/po)
351
352     make po-update
353
354 WARNING: if you run po-update and somebody else does the same and
355 pushes before you push or send a patch to be applied, there will be a
356 conflict when you pull.  Therefore, it is better that only the
357 Translation meister runs this command.
358
359 Updating music snippets can quickly become cumbersome, as most
360 snippets should be identical in all languages.  Fortunately, there is
361 a script that can do this odd job for you (run from Documentation):
362
363     make ISOLANG=<MY_LANGUAGE> snippet-update
364
365 This script overwrites music snippets in <MY_LANGUAGE>/user/every.itely
366 with music snippets from user/every.itely.  It ignores skeleton files,
367 and keeps intact music snippets preceded with a line starting with '@c
368 KEEP LY'; it reports an error for each .itely that has not the same
369 music snippet count in both languages.  Always use this script with a
370 lot of care, i.e. run it on a clean Git working tree, and check the
371 changes it made with "git diff" before committing; if you don't do so,
372 some @lilypond snippets might be broken or make no sense in their
373 context.
374
375 Finally, a command runs the three update processes above for all
376 enabled languages (from Documentation):
377
378     make all-translations-update
379
380 Use this command with caution, and keep in mind it will not be really
381 useful until translations are stabilized after the end of GDP.
382
383
384 POLICY DURING GDP PROCESS
385 or "How to maintain translations without updating them"
386
387 During GDP progress, documentation changes so much, and translators are
388 often involved in GDP too, so keeping translations up to date is very
389 difficult.  However, it is possible -- and even recommended -- to
390 perform some maintaining that keeps translated documentation usable
391 and eases future translation updating.  The rationale below the tasks
392 list motivates this plan.
393
394 The following tasks are listed in decreasing priority order.
395
396 1) Update macros.itexi.  For each obsolete macro definition, if it is
397 possible to update macro usage in documentation with an automatic text
398 or regexp substitution, do it and delete the macro definition from
399 macros.itexi; otherwise, mark this macro definition as obsolete with a
400 comment, and keep it in macros.itexi until the documentation
401 translation has been updated and no longer uses this macro.
402
403 2) Update *.tely files completely with make check-translation -- you
404 may want to redirect ouptput to a file because of overwhelming output,
405 or call check-translation.py on individual files, see CHECK STATE OF
406 TRANSLATION.
407
408 3) in .itelys, match sections and .itely file names with those from
409 English docs, which possibly involves moving nodes contents in block
410 between files, without updating contents itself.  In other words, the
411 game is catching where has gone each section.  In Learning manual, and
412 in Notation Reference sections which have been revised in GDP, there
413 may be completely new sections: in this case, copy @node and
414 @section-command from English docs, and add the marker for
415 untranslated status '@untranslated' on a single line.  Note that it is
416 not possible to exactly match subsections or subsubsections of
417 documentation in English, when contents has been deeply revised; in
418 this case, keep obsolete (sub)subsections in the translation, marking
419 them with a line '@c obsolete' just before the node.
420
421 4) update sections finished in GDP; check sections status at GDP website.
422
423
424 * Hints for Emacs users
425
426 Emacs with Texinfo mode makes this step easier:
427
428 - without Emacs AucTeX installed, C-c C-s shows structure of current
429 Texinfo file in a new buffer *Occur*; to show structure of two files 
430 simultaneously, first split Emacs window in 4 tiles (with C-x 1 and 
431 C-x 2), press C-c C-s to show structure of one file (e.g. the translated
432 file), copy *Occur* contents into *Scratch*, then press C-c C-s for the 
433 other file.
434 If you happen to have installed AucTeX, you can either call the macro
435 by doing M-x texinfo-show-structure or create a key binding in your
436 ~/.emacs, by adding the four following lines:
437         (add-hook 'Texinfo-mode-hook
438                   '(lambda ()
439                      (define-key Texinfo-mode-map "\C-cs"
440                       'texinfo-show-structure)))
441 and then obtain the structure in the *Occur* buffer with C-c s
442
443
444 - Do not bother updating @menus when all menu entries are in the same
445 file ; make sure there is at least a (possibly empty) @menu block
446 everywhere it is needed, then do C-c C-u C-a ("update all menus") when
447 you have updated all the rest of the file.
448
449 - Moving to next or previous node: press C-s and type node (or C-s
450 @node if the text contains the word 'node') then press C-s to move to
451 next node or C-r to move to previous node.  Similar operation can be
452 used to move to the next/previous section.
453
454 - Moving a whole node (or even a sequence of nodes): jump to beginning
455 of the node (quit incremental search by pressing an arrow), press
456 C-SPACE, press C-s node and repeat C-s until you have selected enough
457 text, cut it with C-w or C-x, jump to the right place (moving between
458 nodes with the previous hint is often useful) and paste with C-y or
459 C-v.
460
461
462 4) update documentation PO.  Unless you have special interest in
463 having all titles translated in the next development release, it is
464 better to wait until step 3) has been completed, to avoid doing the
465 work more than once.
466
467 5) Fix broken cross-references by running (from Documentation/)
468
469   make ISOLANG=<YOUR-LANGUAGE> fix-xrefs
470
471 This step requires a sucessful documentation build (with 'make web').
472 Some cross-references are broken because they point to a node that
473 exists in the documentation in English, which has not been added to
474 the translation; in this case, do not fix the cross-reference but keep
475 it "broken", so that the resulting HTML link will point to an existing
476 page of documentation in English.
477
478 Rationale
479
480 You may wonder if it would not be better to leave translations as-is
481 until you can really start updating translations.  There are several
482 reasons to do these maintenance tasks right now.
483
484 - This will have to be done sooner or later anyway, before updating
485 translation of documentation contents, and this can already be done
486 without needing to be redone later, as sections of documentation in
487 English are mostly revised once.  However, note that not all
488 documentation sectioning has been revised in one go, so all this
489 maintenance plan has to be repeated whenever a big reorganization is
490 made. Currently (in May 2008), only chapters 3-7 in Notation Reference
491 and Application Usage have not been reorganized yet.
492
493 - This just makes translated documentation take advantage of the new
494 organization, which is far better than the old one.
495
496 - Moving and renaming sections to match sectioning of documentation in
497 English simplify future updating work: it allows updating the
498 translation by side-by-side comparison, without bothering whether
499 cross-reference names already exist in the translation.
500
501 - Each maintenance task (except 4) updating PO files) can be done by
502 the same person for all languages, which saves overall time spent by
503 translators to achieve this task: the node names and section titles
504 are in English, so you can do.  It is important to take advantage of
505 this now, as it will be more complicated (but still possible) to do
506 step 3) in all languages when documentation is compiled with
507 texi2html and node names are directly translated in source files.
508
509
510 MANAGING TRANSLATIONS WITH GIT
511
512 This policy explains how to manage Git branches and commit
513 translations to Git.
514
515 * Translation changes matching master branch are preferably made on
516 lilypond/translation branch; they may be pushed directly on master
517 only if they do not break compilation of LilyPond and its
518 documentation, and in this case they should be pushed to
519 lilypond/translation too.  Similarly, changes matching stable/X.Y are
520 preferably made on lilypond/X.Ytranslation.
521
522 * lilypond/translation Git branch may be merged into master only if
523 LilyPond ('make all') and documentation ('make web') compile
524 succesfully.
525
526 * master Git branch may be merged into lilypond/translation whenever
527 'make' and 'make web' are succesful (in order to ease documentation
528 compilation by translators), or when significant changes had been made
529 in documentation in English in master branch.
530
531 * General maintenance may be done by anybody who knows what he does
532 in documentation in all languages, without informing translators
533 first.  General maintenance include simple text substitutions
534 (e.g. automated by sed), compilation fixes, updating Texinfo or
535 lilypond-book commands, updating macros, updating ly code, fixing
536 cross-references, and operations described in 'POLICY DURING GDP
537 PROCESS'.
538
539
540 SOME GIT TIPS
541
542 * Saving uncommited changes in the working tree:
543
544     git diff > foo.diff
545
546 This does not save untracked or ignored files.  If you prefer to
547 include changes added to the index with 'git add', replace 'git diff'
548 with 'git diff HEAD'.
549 Then, you may try to apply foo.diff on a source tree with
550
551     patch -p1 < foo.diff
552
553
554 DEALING WITH SEVERAL GIT BRANCHES
555
556 * It is possible to work with several branches on the same local Git
557 repository; this is especially useful for translators who may have to
558 deal with both lilypond/translation and a stable branch
559 (e.g. stable/2.12 or lilypond/translation-2.12).  To fetch and check
560 out a new branch named BRANCH on git.sv.gnu.org, write the two
561 following lines to a text file named .git/remotes/SHORTHAND --
562 SHORTHAND is the name of the remote file, i.e. whatever easy-to-type
563 name you would like to use when pulling or pushing BRANCH, and usually
564 SHORTHAND is an abbreviation of BRANCH without slashes
565
566 URL: git://git.sv.gnu.org/lilypond.git/
567 Pull: BRANCH:refs/remotes/origin/BRANCH
568
569 Then, run
570
571     git fetch SHORTHAND
572     git checkout -b BRANCH origin/BRANCH
573
574 After this, you are able to pull BRANCH from git.sv.gnu.org with
575
576     git pull SHORTHAND
577
578 You can check out another branch OTHER_BRANCH, i.e. check out
579 OTHER_BRANCH to the working tree, with
580
581     git checkout OTHER_BRANCH
582
583 E.g. lilypond/translation, which you still have in your local Git
584 repository but is no longer checked out since you have created the new
585 branch BRANCH.
586
587 Note that it is possible to check out another branch while having
588 uncommitted changes, but it is not recommended unless you know what
589 you are doing; it is recommended to run 'git status' to check this
590 kind of issue before checking out another branch.
591
592 When pulling using SHORTHAND, do not forget to check first that the
593 right branch is checked out, i.e. the branch named A in the first part
594 of the "A:B" refspec in .git/remotes/SHORTHAND: as a matter of fact,
595 when you pull using A:B refspec, Git fetch A on the server as B remote
596 branch on your local repository, then tries to merge B into the
597 currently checked out branch.
598
599 To remember which branch is currently checked out, run 'git branch',
600 which will list all branches and mark the currently checked out branch
601 with a star, or 'git status'.
602
603
604 * To merge branch FOO into branch BAR, i.e. to "add" all changes made
605 in branch FOO to branch BAR, run
606
607     git checkout BAR
608     git merge FOO
609
610 If any conflict happens, please carefully follow the instructions
611 given by 'git merge' -- you usually must resolve conflicts with a text
612 editor by merging pieces of files marked with "<<<" "===" and ">>>",
613 removing these 3 kinds of conflict marks, then commit the result
614 exactly like a usual commit.
615
616 For example, as a translator, you will often want to merge master into
617 lilypond/translation; on the other hand, the Translations meister
618 wants to merge lilypond/translation into master whenever he has
619 checked that lilypond/translation builds successfully.
620
621
622 * If you play with several Git branches (e.g. master,
623 lilypond/translation, stable/2.12), you may want to have one source
624 and build tree for each branch; this is possible with subdirectories
625 of your local Git repository, used as local cloned subrepositories.
626 To create a local clone for the branch named BRANCH, run
627
628     git checkout BRANCH
629     git clone -l -s -n . SUBDIR
630     cd SUBDIR
631     git reset --hard
632
633 Note that SUBDIR must be a directory name which does not already
634 exist.  In SUBDIR, you can use all Git commands to browse revisions
635 history, commit and uncommit changes; to update the cloned
636 subrepository with changes made on the main repository, cd into SUBDIR
637 and run 'git pull'; to send changes made on the subrepository back to
638 the main repository, run 'git push' from SUBDIR.  Note that only one
639 branch (the currently checked out branch) is created in the
640 subrepository by default; it is possible to have several branches in a
641 subrepository and do usual operations (checkout, merge, create,
642 delete...) on these branches, but this possibility is not detailed
643 here.
644
645 Note that when you push BRANCH from SUBDIR to the main repository,
646 and BRANCH is checked out in the main repository, you must save
647 uncommitted changes (see SOME GIT TIPS) and do 'git reset --hard' in
648 the main repository in order to apply pushed changes in the working
649 tree of the main repository.
650
651
652 GIT PUSH ACCESS
653
654 If you have permission to push to Git with login USER, please start a
655 new Git repository from scratch to avoid polluting history with
656 duplicate commits; follow the usual instructions, except that every
657 file you write in .git/remotes should contain instead
658
659 URL: ssh://USER@git.sv.gnu.org/srv/git/lilypond.git
660 Push: BRANCH:refs/heads/BRANCH
661 Pull: BRANCH:refs/remotes/origin/BRANCH
662
663 Then, you can use .git/remotes/NAME to push BRANCH with
664
665     git push NAME
666
667 which works regardless of the branch checked out.
668
669
670 TECHNICAL BACKGROUND
671
672 A number of Python scripts handle a part of the documentation
673 translation process.
674 All scripts used to maintain the translations
675 are located in scripts/aux/:
676
677 * check_translation.py  -- show diff to update a translation
678 * texi-langutils.py  -- quickly and dirtily parse Texinfo files to
679 make message catalogs and Texinfo skeleton files
680 * texi-skeleton-update.py -- update Texinfo skeleton files
681 * update-snippets.py -- synchronize ly snippets with those from
682 English docs
683 * translations-status.py -- update translations status pages and word
684 counts in the file you are reading.
685 * tely-gettext.py -- gettext node names, section titles and references
686 in the sources; WARNING only use this script when support for
687 "makeinfo --html" has been dropped.
688
689 Other scripts are used in the build process, in scripts/build/:
690 * html-gettext.py -- translate node names, section titles and cross
691 references in HTML files generated by makeinfo
692 * texi-gettext.py -- gettext node names, section titles and references
693 before calling texi2pdf
694 * mass-link.py -- link or symlink files between English documentation
695 and documentation in other languages
696
697 Python modules used by scripts in scripts/aux/ or scripts/build/ (but
698 not by installed Python scripts) are located in python/aux/:
699 * manuals_definitions.py -- define manual names and name of
700 cross-reference Texinfo macros
701 * buildlib.py -- common functions (read piped output
702 of a shell command, use Git)
703 * postprocess_html.py (module imported by www_post.py) -- add footer and
704 tweak links in HTML pages
705
706 And finally
707 * python/langdefs.py  -- language definitions module