[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
trans-coord/gnun server/gnun/ChangeLog server/g...
From: |
Yavor Doganov |
Subject: |
trans-coord/gnun server/gnun/ChangeLog server/g... |
Date: |
Wed, 20 Feb 2008 09:11:09 +0000 |
CVSROOT: /sources/trans-coord
Module name: trans-coord
Changes by: Yavor Doganov <yavor> 08/02/20 09:11:09
Added files:
gnun/server/gnun: ChangeLog GNUmakefile README TODO fdl.texi
generic.af.html generic.bg.html
generic.pl.html generic.zh-cn.html gnun.mk
gnun.texi make-prototype validate-html
Removed files:
gnun/prep/gnun : ChangeLog GNUmakefile README TODO fdl.texi
generic.af.html generic.bg.html generic.pl.html
generic.zh-cn.html gnun.mk gnun.texi
make-prototype validate-html
Log message:
Move to the new home /server/gnun.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/prep/gnun/ChangeLog?cvsroot=trans-coord&r1=1.60&r2=0
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/prep/gnun/GNUmakefile?cvsroot=trans-coord&r1=1.40&r2=0
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/prep/gnun/README?cvsroot=trans-coord&r1=1.7&r2=0
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/prep/gnun/TODO?cvsroot=trans-coord&r1=1.15&r2=0
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/prep/gnun/fdl.texi?cvsroot=trans-coord&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/prep/gnun/generic.af.html?cvsroot=trans-coord&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/prep/gnun/generic.bg.html?cvsroot=trans-coord&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/prep/gnun/generic.pl.html?cvsroot=trans-coord&r1=1.1.1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/prep/gnun/generic.zh-cn.html?cvsroot=trans-coord&r1=1.1.1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/prep/gnun/gnun.mk?cvsroot=trans-coord&r1=1.7&r2=0
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/prep/gnun/gnun.texi?cvsroot=trans-coord&r1=1.17&r2=0
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/prep/gnun/make-prototype?cvsroot=trans-coord&r1=1.7&r2=0
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/prep/gnun/validate-html?cvsroot=trans-coord&r1=1.6&r2=0
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/server/gnun/ChangeLog?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/server/gnun/GNUmakefile?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/server/gnun/README?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/server/gnun/TODO?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/server/gnun/fdl.texi?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/server/gnun/generic.af.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/server/gnun/generic.bg.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/server/gnun/generic.pl.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/server/gnun/generic.zh-cn.html?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/server/gnun/gnun.mk?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/server/gnun/gnun.texi?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/server/gnun/make-prototype?cvsroot=trans-coord&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/trans-coord/gnun/server/gnun/validate-html?cvsroot=trans-coord&rev=1.1
Patches:
Index: server/gnun/ChangeLog
===================================================================
RCS file: server/gnun/ChangeLog
diff -N server/gnun/ChangeLog
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ server/gnun/ChangeLog 20 Feb 2008 09:11:07 -0000 1.1
@@ -0,0 +1,859 @@
+2008-02-20 Yavor Doganov <address@hidden>
+
+ * gnun.texi (Advantages): Clarify the usefulness of `urgent'
+ notices propagation.
+ (Concepts): Use double quotes for po4a's meaning.
+
+2008-02-19 Yavor Doganov <address@hidden>
+ Kaloian Doganov <address@hidden>
+
+ * make-prototype (slot-translators-notes)
+ (slot-translators-credits): Inject hints for translators in the
+ POT files in the form of comments.
+
+2008-02-18 Yavor Doganov <address@hidden>
+
+ * GNUmakefile (generic_rules): Fixed a bug which prevented
+ generic.af.html to be made.
+ (GENERIC_LINGUAS, generic-var): New helper variables.
+
+2008-02-17 Yavor Doganov <address@hidden>
+
+ * gnun.texi (Migrating): Add extra sentence to raise translators'
+ attention.
+ (New Translation, generic.LANG.html): Use @var{lang} instead of
+ @code{xx} and the like.
+
+ * GNUmakefile (verbatim-templates): Add Afrikaans templates.
+ * gnun.mk (TEMPLATE_LINGUAS): Remove `fr' and add `af'.
+
+2008-02-16 Yavor Doganov <address@hidden>
+
+ * gnun.texi (Concepts): Typo fix.
+ (Disadvantages, Usage, Runtime Variables, New Translation)
+ (Migrating, generic.LANG.html, make-prototype): Use @var{lang}
+ instead of `xx' for consistency with the gettext manual.
+
+2008-02-15 Yavor Doganov <address@hidden>
+
+ * README: Po4a 0.32 is the minimal requirement.
+
+ * gnun.texi (Advantages): Fix grammar error.
+ (sync): Document the new behavior wrt `verbatim-templates'.
+ (Advantages, make-prototype): Use @acronym for SSI.
+ (validate-html): Likewise for W3C.
+
+2008-02-14 Yavor Doganov <address@hidden>
+
+ * gnun.texi (Concepts): Typo fix.
+
+2008-02-14 Kaloian Doganov <address@hidden>
+
+ * gnun.texi (Concepts): More explanations and a diagram for the
+ "big picture". Influenced by the relevant section in
+ gettext.texi.
+ (Advantages): Replace "immigrants" with "speakers".
+
+2008-02-13 Kaloian Doganov <address@hidden>
+
+ * README: Mention "W3C XHMTL 1.0 DTDs" as an upstream package name
+ instead of the Debian-specific one.
+
+2008-02-10 Yavor Doganov <address@hidden>
+
+ * GNUmakefile: Various doc fixes.
+
+ * gnun.texi (New Translation, Migrating): Use @group in the PO
+ header examples.
+ (Advantages): Mention that no extra work is required to migrate
+ from the old style to new style.
+
+2008-02-09 Yavor Doganov <address@hidden>
+
+ * gnun.texi: New file; basic skeleton of the documentation.
+ * fdl.texi: Import from the canonical location.
+
+2008-02-08 Yavor Doganov <address@hidden>
+
+ * GNUmakefile (generate-pot): Indent and use a workaround for
+ Emacs font lock issue.
+
+2008-02-08 Kaloian Doganov <address@hidden>
+
+ * validate-html: Enrich xmllint's error messages with additional
+ context lines from the input file.
+
+2008-02-08 Yavor Doganov <address@hidden>
+
+ Implement validation for PO files.
+ * GNUmakefile (MSGFMT): New variable.
+ (check-po): New variable containing the command to check the .po
+ files.
+ ($(template_dir)/po/%.$(1).po, $(rootdir)/po/home.$(1).po)
+ ($(1).po): Use it.
+
+2008-02-07 Yavor Doganov <address@hidden>
+
+ * GNUmakefile (verbatim-templates): New variable.
+ (sync): Synchronize server templates that are not gettextized, to
+ enable validation at build time.
+ ($(rootdir)/home.$(1).shtml): Add a `trans-coord'-specific
+ conditional to specify the languages we want to validate.
+
+2008-02-06 Yavor Doganov <address@hidden>
+
+ * validate-html: Add license notice.
+
+ * GNUmakefile (VALIDATESKIP): Use a more robust way to check the
+ value of $(VALIDATE), like $(VCS).
+
+2008-02-06 Kaloian Doganov <address@hidden>
+
+ * validate-html: Lookup for user-wide DTD resources in addition to
+ the system wide catalog.
+ * README: Mention w3c-dtd-xhtml as a dependency.
+
+ * GNUmakefile (VALIDATE-HTML, VALIDATESKIP): New variables.
+ ($(rootdir)/po/home.proto, $(1).proto $(1).translinks): Introduce
+ validation for original HMTL files.
+ ($(rootdir)/home.$(1).shtml, $(subst /po/,/,$(1).html)): Introduce
+ validation for generated HTML files.
+
+2008-02-06 Yavor Doganov <address@hidden>
+
+ * gnun.mk (gnu): Add `gnu-history', `linux-and-gnu' and
+ `why-gnu-linux'.
+ (philosophy): Add `can-you-trust', `free-software-for-freedom',
+ `free-sw', `open-source-misses-the-point', `right-to-read' and
+ `software-literary-patents'.
+
+ * validate-html (FILE): Do not define it.
+ Fix a typo in the sed expression.
+ Instead of hanging, fail if no file is supplied as argument.
+
+2008-02-06 Kaloian Doganov <address@hidden>
+
+ * validate-html: New script to validate XHTML files.
+ * README: Mention two dependencies.
+
+2008-02-05 Yavor Doganov <address@hidden>
+
+ * GNUmakefile (template_files): Remove `banner-homepage', deleted
+ from the master `www' repository.
+ (replaceable_includes): Likewise.
+
+2008-02-04 Yavor Doganov <address@hidden>
+
+ * GNUmakefile (sync): If the file to sync was deleted from the
+ `www' repository, send a warning mail to the list instead of
+ failing with an error. Use $(CVSSKIP) to suppress the mail and
+ commiting the synced files.
+ (devel_addr): New variable.
+
+2008-02-01 Yavor Doganov <address@hidden>
+
+ * GNUmakefile (template_files, sync): Revert last change; test
+ successful.
+
+2008-02-01 Kaloian Doganov <address@hidden>
+
+ * GNUmakefile (CVSOPTS): Replaced by...
+ (CVSSKIP): ...which conditionally holds a command that suppresses
+ $(CVS) invocations. All uses changed.
+
+2008-02-01 Yavor Doganov <address@hidden>
+
+ * GNUmakefile ($(template_dir)/po/%.$(1).po): Revert last change.
+ (template_files): Add `dummy' to test template_rules after the
+ last snafu.
+ (sync): Ignore errors from the first command just for the test,
+ since it will definitely fail because dummy.html does not exist in
+ the `www' repository.
+
+2008-01-31 Yavor Doganov <address@hidden>
+
+ * GNUmakefile (.PRECIOUS): Depend on $(template_dir)/po/%.$(1).po.
+ ($(template_dir)/po/%.$(1).po): Temporarily disable $(CVS)
+ invocation, since the targets are already `cvs add'-ed.
+
+2008-01-30 Kaloian Doganov <address@hidden>
+
+ * gnun.mk (philosophy): Add `java-trap' and `sun-in-night-time'.
+
+2008-01-30 Yavor Doganov <address@hidden>
+
+ * GNUmakefile ($(template_dir)/po/%.$(1).po): Handle the case when
+ webmasters add a new template file but translators cannot catch up
+ immediately; simply copy the newly generated .pot as .xx.po for
+ every language in TEMPLATE_LINGUAS.
+ (replaceable_includes): Doc fix.
+
+2008-01-29 Yavor Doganov <address@hidden>
+
+ * GNUmakefile (MV, TOUCH): Delete and invoke the programs
+ directly. All uses changed.
+ (template_files, replaceable_includes): Add `banner-homepage'.
+
+2008-01-29 Kaloian Doganov <address@hidden>
+
+ * make-prototype:
+ * GNUmakefile: Skip tag <gnu.org-i18n> is renamed to <gnun>.
+ (generate-pot): Fixed bug of inverted logical operator.
+
+2008-01-28 Yavor Doganov <address@hidden>
+
+ * make-prototype:
+ * GNUmakefile:
+ * gnun.mk: Use the new format of the license notice.
+
+2008-01-28 Kaloian Doganov <address@hidden>
+
+ * make-prototype (slot-translators-notes)
+ (slot-translators-credits): Strings changed to reflect the new
+ project name (GNUN).
+
+ * GNUmakefile (generate-pot): Fixed bug in variable quoting.
+
+2008-01-28 Yavor Doganov <address@hidden>
+
+ * GNUmakefile (addfile_dbl): Delete and use double escaped
+ `$(addfile)' instead. All uses changed.
+
+2008-01-28 Kaloian Doganov <address@hidden>
+
+ Ignore POT-Creation-Date changes when they are the only changes in
+ a pot-file.
+ * GNUmakefile (MV): Define to mv.
+ (generate-pot): New variable to hold canned sequence of commands.
+ ($(template_dir)/po/%.pot, $(rootdir)/po/home.pot, $(1).pot): Use
+ generate-pot instead of direct invocation of $(PO4A-GETTEXTIZE).
+
+2008-01-27 Yavor Doganov <address@hidden>
+
+ * gnun.mk (philosophy): Add `philosophy' to test VCS=yes.
+
+2008-01-26 Yavor Doganov <address@hidden>
+
+ Complete support for VCS=(yes|always).
+ * GNUmakefile (CVS): Define to cvs.
+ (vc-add-always): New conditional Phony target.
+ (all): Depend on vcs-add-always.
+ (generic_rules): Simplify and delete the double-colon rule; no
+ longer needed. Remove Subversion-specific conditionals.
+ ($(rootdir)/po/home.pot, $(rootdir)/home.$(1).shtml): Adjust as
+ above.
+ ($(template_dir)/po/%.pot, $(template_dir)/%.$(1).html, $(1).pot)
+ ($(subst /po/,/,$(1).html)): Add ($addfile) or $(addfile_dbl) as
+ first command to the recipe, where appropriate.
+ (sync): Use the CVS variable for consistency.
+
+2008-01-26 Kaloian Doganov <address@hidden>
+
+ * GNUmakefile (template_rules, home_rules)
+ (article_rules): Reduce continuous whitespace with multiple
+ newlines before a comment.
+
+2008-01-26 Yavor Doganov <address@hidden>
+
+ Implement automatic synchronization of the original articles from
+ `www'. Intended to be run by a cron job, since paths are
+ hardcoded.
+ * GNUmakefile (sync): New Phony target.
+ (wwwdir, orig-templates, orig-articles): New variables.
+ (files-to-sync, abs-files-to-sync): Likewise.
+
+2008-01-14 Yavor Doganov <address@hidden>
+
+ * make-prototype (version-message): Update year to 2008.
+
+2008-01-13 Yavor Doganov <address@hidden>
+
+ * make-prototype:
+ * gnun.mk:
+ * GNUmakefile: Update copyright years.
+
+ * prep/i18n/i18n.mk: Rename to...
+ * prep/gnun/gnun.mk: ...as agreed.
+ * prep/gnun/GNUmakefile: Include gnun.mk.
+
+2007-12-31 Kaloian Doganov <address@hidden>
+
+ * www/prep/i18n/GNUmakefile:
+ * www/prep/i18n/i18n.mk:
+ * www/prep/i18n/make-prototype: Fixed typo in the copyright
+ notice.
+
+2007-12-31 Kaloian Doganov <address@hidden>
+
+ * prep/i18n/make-prototype: Removed non-sense commented lines left
+ out by mistake.
+ (make-article, make-home): Removed old debug code. Insert an
+ autogenerated warning message message in the output.
+ (help-message): Fixed a typo in the command name.
+ (slot-translators-note): Renamed to slot-translators-notes. All
+ referrers changed.
+ (skip-tag): New variable to hold the name of the skip tag
+ "gnu.org-i18n" used to escape non-translatable strings.
+ (<skip-tag>, </skip-tag>): Convenient shortcuts for using the
+ value of skip-tag. All users of "gnu.org-i18n" literal changed.
+ (article-page-regexp, home-page-regexp): Add one more capturing
+ group before the "<title>" tag, where the warning message should
+ be placed.
+ (autogenerated-warning): New variable defining the warning
+ message.
+ (<autogenerated-warning>): A convenient shortcut for using the
+ value of autogenerated-warning.
+
+ * gnu/po/gnu.pot:
+ * gnu/po/rms-lisp.pot:
+ * home.bg.shtml:
+ * home.pl.shtml:
+ * home.zh-cn.shtml:
+ * philosophy/po/bdk.pot:
+ * philosophy/po/eldred-amicus.pot:
+ * philosophy/po/schools.bg.po:
+ * philosophy/po/schools.pot:
+ * philosophy/schools.bg.html:
+ * po/home.bg.po:
+ * po/home.pl.po:
+ * po/home.pot:
+ * po/home.zh-cn.po:
+ * po/keepingup.pot:
+ * po/provide.pot:
+ * server/po/banner.pot:
+ * server/po/footer-text.pot: Regenerate forcefully with `make -B'
+ to enforce the inclusion of the "automatically generated" warning
+ message.
+
+2007-12-29 Kaloian Doganov <address@hidden>
+
+ * prep/i18n/make-prototype: New script. Combines functionality
+ from make-prototype.scm and make-prototype-home.scm, which both
+ are now obsolete. Includes sane command line parser and brief
+ help.
+ * prep/i18n/make-prototype.scm: Deleted.
+ * prep/i18n/make-prototype-home.scm: Deleted.
+ * prep/i18n/GNUmakefile: Updated calls to
+ prep/i18n/make-prototype.
+
+2007-12-28 Yavor Doganov <address@hidden>
+
+ Initial partially working VCS support for generic.xx.html and the
+ homepages.
+ * prep/i18n/GNUmakefile (CVS): New variable.
+ (CVSOPTS): New conditionally defined variable, based on the value
+ of VCS.
+ (addfile, addfile_dbl): Define command sequences for convenience.
+ (generic_rules): Use them. Implement a conditional double-colon
+ template rule and modified commands based on VCS=always and
+ CVS=svn.
+ ($(rootdir)/po/home.pot, $(rootdir)/home.$(1).shtml): Add
+ conditional commands for adding the targets under VCS control.
+ Does not work reliably (or should I say "at all") with `make
+ VCS=always' when the targets are considered up-to-date.
+
+2007-12-12 Yavor Doganov <address@hidden>
+
+ * home.bg.shtml: Regenerate.
+
+ First real simulation of the new translation process.
+ * po/home.bg.po: Translated fuzzy/untranslated messages with Emacs
+ PO mode.
+
+ * server/po/banner.pot:
+ * server/po/footer-text.pot:
+ * server/po/banner.bg.po:
+ * server/po/banner.fr.po:
+ * server/po/footer-text.bg.po:
+ * server/po/footer-text.fr.po:
+ * server/banner.bg.html:
+ * server/banner.fr.html: Regenerate forcefully with `make -B
+ <target>' to enforce the usage of the xhtml module.
+
+2007-12-12 Kaloian Doganov <address@hidden>
+
+ * prep/i18n/GNUmakefile ($(template_dir)/po/%.pot): Po4a backend
+ switch from html to xhtml.
+ (template_rules): Likewise.
+ (PO4A_HTMLFLAGS): Deleted, since html backend is not used anymore.
+
+2007-12-10 Yavor Doganov <address@hidden>
+
+ * prep/i18n/GNUmakefile:
+ * prep/i18n/i18n.mk:
+ * prep/i18n/make-prototype.scm:
+ * prep/i18n/make-prototype-home.scm: Add license notices.
+
+2007-12-09 Yavor Doganov <address@hidden>
+
+ First real-life simulation of the build system, commit as a
+ separate revision so that everyone can reproduce the make process
+ with the VCS.
+ * po/home.pot:
+ * po/home.bg.po:
+ * po/home.pl.po:
+ * po/home.zh-cn.po:
+ * home.bg.shtml:
+ * home.pl.shtml:
+ * home.zh-cn.shtml:
+ * server/po/banner.pot:
+ * server/po/banner.bg.po:
+ * server/po/banner.fr.po:
+ * server/banner.bg.html:
+ * server/banner.fr.html:
+ * server/po/footer-text.pot:
+ * server/po/footer-text.bg.po:
+ * server/po/footer-text.fr.po:
+ * server/footer-text.bg.html:
+ * server/footer-text.fr.html: Regenerated by simply running
+ `make -C prep/i18n'.
+
+2007-12-09 Yavor Doganov <address@hidden>
+
+ Update to the new style.
+ * prep/i18n/GNUmakefile (template_files): Remove
+ sidebar-fsf-support, sidebar-top-half and sidebar-stay; all
+ obsolete now.
+ * home.shtml:
+ * server/banner.html:
+ * server/footer-text.html: Update from the `www' master repo.
+ * server/sidebar-fsf-support.html:
+ * server/footer-text.html:
+ * server/sidebar-top-half.html:
+ * server/sidebar-bottom-half.html:
+ * server/sidebar-stay.html:
+ * server/po/sidebar-fsf-support.fr.po:
+ * server/po/sidebar-top-half.pot:
+ * server/po/sidebar-bottom-half.pot:
+ * server/po/sidebar-top-half.bg.po:
+ * server/po/sidebar-bottom-half.bg.po:
+ * server/po/sidebar-stay.pot:
+ * server/po/sidebar-stay.bg.po:
+ * server/po/sidebar-fsf-support.pot:
+ * server/po/sidebar-fsf-support.bg.po:
+ * server/po/sidebar-top-half.fr.po:
+ * server/po/sidebar-bottom-half.fr.po:
+ * server/po/sidebar-stay.fr.po: Delete; not needed anymore.
+
+2007-12-08 Yavor Doganov <address@hidden>
+
+ * home.bg.shtml:
+ * home.pl.shtml:
+ * home.zh-cn.shtml:
+ * prep/i18n/generic.pl.html:
+ * server/banner.fr.html:
+ * server/footer-text.bg.html:
+ * server/footer-text.fr.html: Add these generated files to provoke
+ full simulation.
+
+2007-12-07 Yavor Doganov <address@hidden>
+
+ Fix the Polish gnusflashes unpleasant situation.
+ * prep/i18n/GNUmakefile ($(rootdir)/home.$(1).shtml): Use an
+ `ifeq' conditional that tests if the value of h_lang is `pl' and
+ executes a simplified command. Document the reason.
+ * prep/i18n/i18n.mk (HOME_LINGUAS): Add pl.
+ * po/home.pl.po: New untranslated file to test the proper
+ generation of the Polish homepage.
+
+2007-12-07 Kaloian Doganov <address@hidden>
+
+ * prep/i18n/GNUmakefile ($(rootdir)/po/home.proto)
+ ($(1).proto $(1).translinks): Fixed a bug that caused make to stop
+ regardless of the exit status of the Scheme script.
+
+2007-12-06 Yavor Doganov <address@hidden>
+
+ * prep/i18n/GNUmakefile ($(rootdir)/po/home.proto)
+ ($(1).proto $(1).translinks): If the .proto and .translinks
+ generation fails (usually due to a validation bug in the source
+ article or bug in the Scheme script itself), exit with a non-zero
+ status right after deleting the targets, so that make stops
+ exactly on these commands.
+
+2007-12-05 Yavor Doganov <address@hidden>
+
+ * keepingup.html: Updated from `www' with bugfixes.
+ * po/keepingup.pot: Generated.
+
+ * keepingup.html:
+ * provide.html:
+ * gnu/gnu.html:
+ * gnu/rms-lisp.html:
+ * philosophy/bdk.html:
+ * philosophy/eldred-amicus.html: Imported new articles from the
+ central `www' repository to test the new rules.
+ * po/provide.pot:
+ * gnu/po/gnu.pot:
+ * gnu/po/rms-lisp.pot:
+ * philosophy/po/bdk.pot:
+ * philosophy/po/eldred-amicus.pot: Generated.
+ * po/home.pot:
+ * po/home.zh-cn.po:
+ * philosophy/po/schools.pot: Updated.
+
+2007-09-08 Yavor Doganov <address@hidden>
+
+ * prep/i18n/GNUmakefile (article_rules) [generic.$(2).html]: Move
+ into its own template `generic_rules' and rename it to
+ `generic.$(1).html'. This is necessary because there might be
+ only home.cs.po without any other article translated in Czech. The
+ home rule would fail in that case.
+
+2007-09-07 Yavor Doganov <address@hidden>
+
+ * prep/i18n/GNUmakefile (article_rules) [generic.$(2).html]: New
+ target.
+ ($(subst /po/,/,$(1).html)): Depend on it, so if the team changes
+ the description, all articles under make's control to be updated.
+ Remove the command that checks for the presence and touches the
+ file.
+
+ * prep/i18n/GNUmakefile: Housekeeping. Delete the redundant
+ `targets' from all comments.
+
+ * prep/i18n/GNUmakefile (rootdir, replaceable_includes): Define as
+ simply expanded.
+
+ * prep/i18n/i18n.mk: Mark all variables as simply expanded.
+
+ * prep/i18n/GNUmakefile (home.proto, article_pot_rules)
+ [$(1).proto $(1).translinks]: If $(MAKE_PROTOTYPE_HOME) and
+ $(MAKE_PROTOTYPE) exit with a non-zero code, remove the possibly
+ erroneously generated files in order targets not to be considered
+ up-to-date on the next make's run. This prevents breaking the
+ translations badly further in the chain. The Scheme backtrace
+ should be sufficient to figure out what's going on.
+
+2007-09-05 Yavor Doganov <address@hidden>
+
+ Initial implementation of the generalization of the generic
+ articles' translations and PO/POT manipulation.
+ * prep/i18n/i18n.mk (ROOT, gnu, philosophy, ALL_DIRS): New
+ variables.
+ * prep/i18n/GNUmakefile (articles, articles_pot, root_articles)
+ (root_articles_pot, ALL_POTS, ALL_BASE, find_po, ALL_POS)
+ (ALL_POS_BASE, articles_translated): New variables.
+ (all): Depend on $(ALL_POTS) and $(articles_translated), remove
+ schools.bg.html.
+ (article_pot_rules, article_rules): New `define'd template rules,
+ replacing entirely all schools's rules.
+
+2007-08-19 Kaloian Doganov <address@hidden>
+
+ * po/home.bg.po: Partly translated according to Yavor Doganov's
+ <address@hidden> translation.
+
+2007-08-19 Yavor Doganov <address@hidden>
+
+ * po/home.bg.po: Filled encoding in `Content-Type' and
+ `Content-Transfer-Encoding' headers.
+ * po/home.zh-cn.po: Added a dummy file to let `make' exit w/o
+ errors.
+ * server/po/sidebar-fsf-support.fr.po: Likewise.
+ * server/po/banner.fr.po: Likewise.
+ * server/po/footer-text.fr.po: Likewise.
+ * server/po/sidebar-top-half.fr.po: Likewise.
+ * server/po/sidebar-bottom-half.fr.po: Likewise.
+ * server/po/sidebar-stay.fr.po: Likewise.
+
+2007-08-19 Kaloian Doganov <address@hidden>
+
+ * philosophy/schools.pot: Updated using latest po4a toolkit with
+ xhtml backend.
+ * philosophy/schools.bg.po: Likewise.
+ * philosophy/schools.bg.html: Regenerated using latest po4a
+ toolkit and schools.bg.po.
+
+ * prep/i18n/GNUmakefile (../../philosophy/po/schools.proto): fixed
+ a typo in prerequisites.
+
+ * prep/i18n/GNUmakefile ($(rootdir)/po/home.proto)
+ ($(rootdir)/home.$(1).shtml, ../../philosophy/po/schools.proto)
+ (../../philosophy/schools.bg.html): A new special tag
+ <gnu.org-i18n> is used to denote non-translatable strings (instead
+ of HTML comments).
+ * prep/i18n/make-prototype-home.scm: <gnu.org-i18n> used to escape
+ non-translatable strings.
+ * prep/i18n/make-prototype.scm: Likewise.
+
+2007-08-12 Yavor Doganov <address@hidden>
+
+ * prep/i18n/GNUmakefile (home.$(1).shtml): Fixed escaping problems
+ in the sed expressions as a result of the `eval' function.
+
+ * prep/i18n/GNUmakefile (home.$(1).shtml): Added a comment about
+ another escape error.
+
+ * prep/i18n/GNUmakefile: Fixed a typo (replacable -> replaceable);
+ all uses changed. Added a note about a bug in the home.$(1).shtml
+ target.
+ (home.$(1).shtml): Added a sed expression to replace
+ gnusflashes.include with the translated one.
+
+ * prep/i18n/GNUmakefile (template_dir): Compute it based on
+ $(rootdir).
+ (home.proto): Deleted comments for bugginess, not relevant any
+ more.
+
+2007-08-12 Kaloian Doganov <address@hidden>
+
+ * prep/i18n/GNUmakefile (PO4A_XHTMLFLAGS): Updated for
+ compatibility with po4a from the latest CVS HEAD.
+
+ * prep/i18n/GNUmakefile ($(rootdir)/po/home.proto): Removed
+ language code from "generic.html".
+ ($(rootdir)/home.$(1).shtml): Added command to replace
+ "generic.html" with "generic.LANG.html".
+ (../../philosophy/po/schools.proto): Removed language code from
+ "generic.html".
+ (../../philosophy/schools.bg.html): Added command to replace
+ "generic.html" with "generic.LANG.html".
+
+ * po/home.pot: Added.
+ * po/home.bg.po: Added.
+ * prep/i18n/make-prototype-home.scm: Added. Variant of
+ make-prototype.scm to handle the special case of home.shtml.
+ * prep/i18n/GNUmakefile (MAKE-PROTOTYPE-HOME): New variable for
+ calling make-prototype-home.scm.
+ ($(rootdir)/po/home.proto): Call to MAKE-PROTOTYPE-HOME instead of
+ MAKE-PROTOTYPE. Unescape special characters since this rule is no
+ longer evaluated with `eval'.
+ ($(rootdir)/home.$(1).shtml): Fixed typo in call to PO4A-TRANSLATE.
+
+ * prep/i18n/make-prototype.scm: Variable temp-filename renamed to
+ proto-filename in order to reflect the current terminology.
+
+2007-08-11 Kaloian Doganov <address@hidden>
+
+ * prep/i18n/GNUmakefile (../../philosophy/schools.bg.html): As
+ articles are treated as XHTML, po4a-translate must be invoked with
+ xhtml flags, not html ones.
+
+ * prep/i18n/GNUmakefile (PO4A_XHTMLFLAGS): Fixed bug in parser
+ options.
+
+ * prep/i18n/GNUmakefile (PO4A-GETTEXTIZE, PO4A-TRANSLATE): Program
+ flags are moved in two groups of variables grouped by tool and by
+ format.
+ (PO4A-GETTEXTIZEFLAGS): Flags for po4a-gettextize.
+ (PO4A-TRANSLATEFLAGS): Flags for po4a-translate.
+ (PO4A_HTMLFLAGS): Flags to select HTML format.
+ (PO4A_XHTMLFLAGS): Flags to select XHTML format. All callers
+ changed.
+
+ * prep/i18n/GNUmakefile ($(rootdir)/po/home.proto): Taken out from
+ home_rules, since there is no need to regenerate this rule for
+ every language.
+
+2007-08-11 Yavor Doganov <address@hidden>
+
+ Preliminary support for the homepages.
+ * home.shtml: Added.
+ * prep/i18n/generic.zh-cn.html: Likewise.
+ * prep/i18n/i18n.mk (HOME_LINGUAS): New variable.
+ * prep/i18n/GNUmakefile (rootdir): New global variable.
+ (home_lang, home_translated): New variables.
+ (all): Depend on home_translated.
+ ($(rootdir)/po/home.pot): New target.
+ ($(rootdir)/po/home.proto, $(rootdir)/po/home.$(1).po)
+ ($(rootdir)/home.$(1).shtml): New targets, encapsulated in `define
+ home_rules'.
+
+2007-08-11 Kaloian Doganov <address@hidden>
+
+ * prep/i18n/GNUmakefile (template_translated_base)
+ (template_translated): Defined as simply expanded variables for
+ performance and error-proofing reasons.
+
+2007-08-10 Kaloian Doganov <address@hidden>
+
+ * prep/i18n/GNUmakefile: Cleaner way to calculate
+ template_translated.
+
+2007-08-10 Yavor Doganov <address@hidden>
+
+ * prep/i18n/Makefile: Renamed to...
+ * prep/i18n/GNUmakefile: ...since we use a lot of GNU extensions.
+
+2007-08-09 Kaloian Doganov <address@hidden>
+
+ * prep/i18n/Makefile:
+ * prep/i18n/make-prototype.scm:
+ * prep/i18n/make-template.scm: ÐÑеименÑван на
make-prototype.scm
+ за да Ñе избегне пÑипокÑиванеÑо Ñ Ð²ÐµÑе
ÑÑÑеÑÑÑваÑаÑа ÑпоÑÑеба на
+ ÑеÑмина `template'.
+
+2007-08-09 Yavor Doganov <address@hidden>
+
+ * prep/i18n/i18n.mk: New file.
+ * prep/i18n/Makefile: Include i18n.mk.
+ (template_translated_base): New variable.
+ (template_translated): Make it appendable and encapsulate it in
+ `define'; call a special pattern function for substitution of
+ $(TEMPLATE_LINGUAS).
+ (template_rules): Likewise, pattern rules invoked by `eval' and
+ 'call'.
+
+2007-08-08 Yavor Doganov <address@hidden>
+
+ * prep/i18n/Makefile (RM): Do not define it as it is `rm -f' by
+ default. Adjusted all variables, targets, rules and commands to
+ the new path.
+
+ * Makefile:
+ * make-template.scm: Moved to www/prep/i18n to mimic the official
+ repo's layout.
+
+2007-08-07 Kaloian Doganov <address@hidden>
+
+ * Makefile:
+ * prep/i18n/generic.bg.html:
+ * standards/translation-generic.bg.html: ÐÑемеÑÑен и
пÑеименÑван
+ каÑо www/standards/generic.bg.html.
+
+ * prep/i18n: СÑздадена диÑекÑоÑÐ¸Ñ Ð·Ð° ÑÑÑ
ÑанÑване на ÑайловеÑе Ñ
+ обÑа инÑоÑмаÑÐ¸Ñ Ð·Ð° екипиÑе/пÑоекÑиÑе
за пÑевод.
+
+2007-08-05 Yavor Doganov <address@hidden>
+
+ ÐÑÑва ÑÑÑпка пÑи генеÑализаÑаиÑÑа на
ÑаблониÑе в /server.
+ * Makefile (template_dir, template_files, template_pot)
+ (template_translated): Ðови пÑоменливи.
+ (all): ÐамÑна на banner.bg.html Ñ $(template_translated).
+ (.PRECIOUS): Ðова ÑпеÑиална Ñел.
+ (banner.bg.pot): ЦелÑа пÑемеÑÑена...
+ ($(template_dir)/po/%.pot): ...ÑÑк.
+ (banner.bg.po): ÐÑемеÑÑена...
+ ($(template_dir)/po/%.bg.po): ...ÑÑк.
+ (banner.bg.html): ÐÑемеÑÑена...
+ ($(template_dir)/%.bg.html): ...ÑÑк.
+ Ðзползване на авÑомаÑиÑни пÑоменливи,
кÑдеÑо е вÑзможно.
+ * server/sidebar-fsf-support.html:
+ * server/footer-text.html:
+ * server/sidebar-top-half.html:
+ * server/sidebar-bottom-half.html:
+ * server/sidebar-stay.html: ÐопиÑани оÑ
оÑиÑиалноÑо Ñ
ÑанилиÑе
+ `www'.
+ * server/po/sidebar-fsf-support.pot:
+ * server/po/footer-text.pot:
+ * server/po/sidebar-top-half.pot:
+ * server/po/sidebar-bottom-half.pot:
+ * server/po/sidebar-stay.pot:
+ * server/po/sidebar-fsf-support.bg.po:
+ * server/po/footer-text.bg.po:
+ * server/po/sidebar-top-half.bg.po:
+ * server/po/sidebar-bottom-half.bg.po:
+ * server/po/sidebar-stay.bg.po: ÐенеÑиÑани и
добавени (заÑега без
+ пÑевод).
+
+2007-08-05 Kaloian Doganov <address@hidden>
+
+ * server/banner.bg.html:
+ * server/po/banner.bg.po:
+ * server/po/banner.pot: ÐÑевод на banner.bg.po
+
+ * server/banner.html: ÐÑемаÑ
Ð½Ð°Ñ Ð¿Ð°ÑазиÑен низ,
оÑÑавен Ð¾Ñ Ð¿Ð¾-Ñанни
+ ÑеÑÑове.
+
+ * Makefile:
+ * server/banner.bg.html:
+ * server/banner.html:
+ * server/po/banner.bg.po:
+ * server/po/banner.pot: ÐнÑÑаÑÑÑÑкÑÑÑа за
инÑеÑнаÑионализаÑÐ¸Ñ Ð½Ð°
+ www/server/banner.html.
+
+2007-08-03 Kaloian Doganov <address@hidden>
+
+ * cut-translations.scm:
+ * philosophy/po/schools.bg.po:
+ * philosophy/po/schools.pot: РазмеÑÑване меÑÑаÑа на
бележкиÑе под
+ Ð»Ð¸Ð½Ð¸Ñ Ð¸ заÑлÑгиÑе.
+
+ * philosophy/po/schools.bg.po: ÐейÑÑвиÑелно
подаване на пÑомениÑе,
+ опиÑани в пÑедноÑо ÑÑобÑение.
+
+ * cut-translations (main): РегÑлÑÑниÑÑ Ð¸Ð·Ñаз,
използван за
+ ÑÑпоÑÑавÑне на HTML-ÑÑаниÑиÑе, е изнеÑен
в оÑделна пÑоменлива
+ page-regexp. ÐмÑÐºÐ½Ð°Ñ Ð¿Ð°ÑамеÑÑÑ Ð½Ð° вÑоÑа
позиÑÐ¸Ñ -- име на Ñайла Ñ
+ обÑа инÑоÑмаÑÐ¸Ñ Ð·Ð° пÑевода. ÐоÑÑавÑне
на slot-ове за бележки на
+ пÑеводаÑа, заÑлÑги на пÑеводаÑа и обÑа
инÑоÑмаÑÐ¸Ñ Ð·Ð° пÑевода.
+ * schools.pot: Ðобавени Ñа ÑлÑжебни низове за
бележки на пÑеводаÑа
+ и заÑлÑги.
+ * schools.bg.po: ÐÑеведени Ñа новиÑе ÑлÑжебни
низове бележки на
+ пÑеводаÑа и заÑлÑги.
+ * translation-generic.bg.html: ÐбÑа инÑоÑмаÑÐ¸Ñ Ð·Ð°
пÑеводиÑе на
+ бÑлгаÑÑки език.
+ * Makefile (www/philosophy/schools.bg.html): ÐавиÑимоÑÑ ÐºÑм
+ www/standards/translation-generic.bg.html.
+
+2007-08-01 Kaloian Doganov <address@hidden>
+
+ * philosophy/po/schools.bg.po:
+ * philosophy/po/schools.pot:
+ * Makefile (www/philosophy/po/schools.temp)
+ (www/philosophy/schools.bg.html): ÐизÑÑ $Date.*$ вÑеменно
Ñе
+ загÑажда Ñ ÐºÐ¾Ð¼ÐµÐ½ÑаÑ, Ñака Ñе да не
влиза в ÑÑдÑÑжаниеÑо на
+ генеÑиÑÐ°Ð½Ð¸Ñ POT-Ñайл.
+
+2007-07-31 Yavor Doganov <address@hidden>
+
+ * standards: ÐобавÑне на допÑлниÑелна
диÑекÑоÑиÑ, коÑÑо да емÑлиÑа
+ /server/standards/translations (мÑÑÑоÑо, кÑдеÑо Ñе Ñе
ÑÑдÑÑжа Ñайл
+ Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð·Ð° ÑÑоÑвеÑÐ½Ð¸Ñ ÐµÐºÐ¸Ð¿.)
+
+2007-07-31 Kaloian Doganov <address@hidden>
+
+ * philosophy/po/schools.bg.po:
+ * philosophy/po/schools.pot: СпиÑÑкÑÑ Ñ ÐµÐ·Ð¸ÑиÑе
веÑе не ÑаÑÑ Ð¾Ñ
+ .po и .pot-ÑайловеÑе.
+
+ * philosophy/po/schools.bg.po:
+ * philosophy/schools.bg.html: ÐÑеведени Ñа вÑиÑки
абзаÑи оÑ
+ schools.
+
+ * philosophy/po/schools.bg.po:
+ * philosophy/po/schools.pot:
+ * philosophy/schools.bg.html: ЧаÑÑиÑен пÑевод на
schools.
+
+ * gnu.org-i18n/po4a:
+ * Makefile: СÑздаване на клон po4a Ð¾Ñ translate.
+
+ * Makefile: ÐоÑегаÑнаÑа ÑазÑабоÑка е
пÑемеÑÑена в клона translate.
+
+2007-07-30 Kaloian Doganov <address@hidden>
+
+ * Makefile:
+ * philosophy/schools.bg.html: ÐенеÑиÑан schools.bg.html и
+ деÑиниÑии в Makefile за генеÑиÑанеÑо мÑ.
+
+ * philosophy/po/schools.bg.po: ÐÑÑвонаÑален "пÑевод"
на
+ schools.bg.po.
+
+ * Makefile:
+ * philosophy/po/schools.bg.po:
+ * philosophy/po/schools.pot: schools.pot, schools.bg.po и Makefile
+ за генеÑиÑанеÑо им.
+
+ * philosophy/po: po-диÑекÑоÑÐ¸Ñ Ð·Ð° пÑеводиÑе на
philosophy.
+
+ * philosophy/schools.bg.html:
+ * philosophy/schools.html: philosophy/schools.html на
английÑки и
+ бÑлгаÑÑки.
+
+ Copyright (C) 2007, 2008 Free Software Foundation, Inc.
+
+ This file is part of GNUnited Nations.
+
+ GNUnited Nations is free software: you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ GNUnited Nations is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNUnited Nations. If not, see <http://www.gnu.org/licenses/>.
Index: server/gnun/GNUmakefile
===================================================================
RCS file: server/gnun/GNUmakefile
diff -N server/gnun/GNUmakefile
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ server/gnun/GNUmakefile 20 Feb 2008 09:11:07 -0000 1.1
@@ -0,0 +1,315 @@
+# Copyright (C) 2007, 2008 Free Software Foundation, Inc.
+
+# This file is part of GNUnited Nations.
+
+# GNUnited Nations is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+
+# GNUnited Nations is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with GNUnited Nations. If not, see <http://www.gnu.org/licenses/>.
+
+MSGMERGE = msgmerge
+MSGFMT = msgfmt
+PO4A-GETTEXTIZE = po4a-gettextize
+PO4A-TRANSLATE = po4a-translate
+MAKE-PROTOTYPE = ./make-prototype
+VALIDATE-HTML = ./validate-html
+SED = sed
+M4 = m4
+
+PO4A-GETTEXTIZEFLAGS =
+PO4A-TRANSLATEFLAGS = --keep=0
+
+PO4A_XHTMLFLAGS = --format=xhtml -o ontagerror=silent -o "tags=<gnun>"
+
+# This variable exists only for the purpose of defining it to a
+# non-standard executable while testing future cvs releases. The
+# rules already depend on cvs-specific options.
+CVS := cvs
+
+# Do not `cvs add' any files by default unless VCS=yes.
+ifneq (,$(findstring yes,$(VCS)))
+CVSSKIP :=
+else
+CVSSKIP := echo "SKIP:"
+endif
+
+# Do not validate any files by default unless VALIDATE=yes.
+ifneq (,$(findstring yes,$(VALIDATE)))
+VALIDATESKIP :=
+else
+VALIDATESKIP := echo "SKIP:"
+endif
+
+# Email addresses for notifications.
+devel_addr := address@hidden
+
+rootdir := ../..
+
+# FIXME: footer-short and footer-min are remnants from the old-new
+# design; they should go at some point.
+replaceable_includes := header banner footer footer-short footer-min
+
+include gnun.mk
+
+### Special variables for the `www' master templates ###
+template_dir := $(rootdir)/server
+template_files := banner \
+ footer-text
+template_translated_base := $(addprefix $(template_dir)/,$(template_files))
+template_lang = $(addsuffix .$(1).html,$(template_translated_base))
+template_translated := $(foreach t_lang,$(TEMPLATE_LINGUAS),$(call
template_lang,$(t_lang)))
+$(info template_translated = $(template_translated)) # for debugging purposes
+### End of variables declaration (templates) ###
+
+### Special variables for the home pages ###
+home_lang = $(rootdir)/home.$(1).shtml
+home_translated := $(foreach h_lang,$(HOME_LINGUAS),$(call
home_lang,$(h_lang)))
+$(info home_translated = $(home_translated)) # for debugging purposes
+### End of variables declaration (homepages) ###
+
+### Special variables for all other articles ###
+# FIXME: Variables' computatation could be optimized, but in any event
+# it is much better if translators do not have to add manually anything.
+articles := $(foreach dir,$(ALL_DIRS),$(addprefix $(dir)/po/,$(value $(dir))))
+articles_pot := $(addprefix $(rootdir)/,$(articles:%=%.pot))
+root_articles := $(foreach root_article,$(ROOT),$(addprefix
$(rootdir)/po/,$(root_article)))
+root_articles_pot := $(root_articles:%=%.pot)
+ALL_POTS := $(articles_pot) $(root_articles_pot)
+ALL_BASE := $(ALL_POTS:%.pot=%)
+find_po = $(wildcard $(1).*.po)
+ALL_POS := $(foreach pot,$(ALL_POTS),$(call find_po,$(basename $(pot))))
+ALL_POS_BASE := $(ALL_POS:%.po=%)
+articles_translated := $(subst /po/,/,$(ALL_POS:%.po=%.html))
+$(info ALL_POTS = $(ALL_POTS)) # for debugging purposes
+$(info articles_translated = $(articles_translated)) # for debugging purposes
+### End of variables declaration (all articles) ###
+
+.PHONY: all vcs-add-always
+all: $(template_translated) $(home_translated) $(ALL_POTS) \
+ $(articles_translated) vcs-add-always
+
+# The command to add a file to the repository.
+define addfile
+[ -f $@ ] || (touch $@ ; $(CVSSKIP) $(CVS) add $@)
+endef
+
+# The command to generate pot file which perform additional checks
+# whether the changes are not trivial (regarding only
+# POT-Creation-Date), in which case the changes are ignored.
+define generate-pot
address@hidden Generating POT...
+$(PO4A-GETTEXTIZE) $(PO4A_XHTMLFLAGS) $(PO4A-GETTEXTIZEFLAGS) \
+ --master $< --po address@hidden
+if ([ ! -f $@ ] || [ "`diff -U 0 $@ address@hidden | grep -v
"^\(---\|+++\|@@\)" \
+ | grep -v '^[-+]\"POT-Creation-Date:' | wc -c`" -ne 0 ]); then \
+ mv address@hidden $@ ; \
+fi;
+touch $@
+$(RM) address@hidden
+endef
+
+# The command to check the validity of a PO file.
+define check-po
+$(VALIDATESKIP) $(MSGFMT) --check --verbose --output-file=/dev/null $$@
+endef
+
+# Ensure that generic.LANG.html is always present for the homepage and
+# articles' generation.
+
+define generic-var
+GENERIC_LINGUAS += $(1)
+endef
+
+define generic_rules
+generic.$(1).html:
+ $$(addfile)
+endef
+
+$(foreach h_lang,$(HOME_LINGUAS),$(eval $(call generic-var,$(h_lang))))
+$(foreach po_base,$(ALL_POS_BASE), \
+ $(eval $(call generic-var,$(subst .,,$(suffix $(po_base))))))
+$(foreach g_lang,$(sort $(GENERIC_LINGUAS)), \
+ $(eval $(call generic_rules,$(g_lang))))
+
+### Specific rules for the templates ###
+.PRECIOUS: $(template_dir)/po/%.pot
+$(template_dir)/po/%.pot: $(template_dir)/%.html
+ $(addfile)
+ $(generate-pot)
+
+define template_rules
+.PRECIOUS: $(template_dir)/po/%.$(1).po
+$(template_dir)/po/%.$(1).po: $(template_dir)/po/%.pot
+# If the POT is new, it is natural that teams cannot translate it at
+# once. Create a copy for every PO file in TEMPLATE_LINGUAS so that
+# the build can continue without errors.
+# FIXME: Check if this approach works with gettext >> 0.14.
+ [ -f $$@ ] || (cp $$< $$@ ; $(CVSSKIP) $(CVS) add $$@)
+# Since we handle the case when new templates are added by webmasters,
+# it is OK to ignore errors from these, at least until fencepost has
+# an old version of gettext. The XHTML validation errors should be
+# clear even if the bug is in the server templates translations.
+ -$(check-po)
+ @echo Updating PO file...
+ $(MSGMERGE) --update $$@ $$< && touch $$@
+
+$(template_dir)/%.$(1).html: $(template_dir)/%.html
$(template_dir)/po/%.$(1).po
+ $$(addfile)
+ @echo Generating the translated article...
+ $(PO4A-TRANSLATE) $(PO4A_XHTMLFLAGS) $(PO4A-TRANSLATEFLAGS) --master
$$< --po \
+ $(template_dir)/po/$$(*F).$(1).po --localized $$@
+ $(SED) --in-place ':egin;N;$$$$!begin;s/\([ \t]*\n[
\t]*\)\{3,\}<!--/\n\n<!--/g' $$@
+endef
+
+$(foreach t_lang,$(TEMPLATE_LINGUAS),$(eval $(call template_rules,$(t_lang))))
+### End of the templates-specific rules ###
+
+### Specific rules for the homepages ###
+$(rootdir)/po/home.proto: $(rootdir)/home.shtml
+# Delete the target if the script exits with a non-zero status
+# in order to prevent further messing up in the chain. For
+# extra safety, exit with an error so that make does not
+# proceed to the next command.
+ $(VALIDATESKIP) $(VALIDATE-HTML) $<
+ $(MAKE-PROTOTYPE) --home --input=$< --generic=generic.html --output=$@
|| ($(RM) $@ ; exit 1)
+ $(SED) --in-place "s/\$$Date.*\$$/<gnun>\0<\/gnun>/g" $@
+
+$(rootdir)/po/home.pot: $(rootdir)/po/home.proto
+ $(addfile)
+ $(generate-pot)
+
+define home_rules
+$(rootdir)/po/home.$(1).po: $(rootdir)/po/home.pot
+# This is temporary for `trans-coord'; errors should not be ignored
+# when GNUN runs in the official repository.
+ -$(check-po)
+ $(MSGMERGE) --update $$@ $$<
+ touch $$@
+
+$(rootdir)/home.$(1).shtml: $(rootdir)/po/home.proto
$(rootdir)/po/home.$(1).po generic.$(1).html
+ $$(addfile)
+ $(PO4A-TRANSLATE) $(PO4A_XHTMLFLAGS) $(PO4A-TRANSLATEFLAGS) --master
$$< --po $(rootdir)/po/home.$(1).po --localized $(rootdir)/po/home.$(1).m4
+ $(SED) --in-place
"s/\(<gnun>include(\`.*\)\([.]html')<\/gnun>\)/\1.$(1)\2/g"
$(rootdir)/po/home.$(1).m4
+ $(SED) --in-place "s/<gnun>\(.*\)<\/gnun>/\1/g"
$(rootdir)/po/home.$(1).m4
+ $(SED) --in-place ':egin;N;$$$$!begin;s/\([ \t]*\n[
\t]*\)\{3,\}<!--/\n\n<!--/g' $(rootdir)/po/home.$(1).m4
+ for replaceable in $(replaceable_includes); do \
+ $(SED) --in-place "s/\(<!--#include
virtual=\".*$$$$replaceable\)\(.html\" -->\)/\1.$(1)\2/g"
$(rootdir)/po/home.$(1).m4; \
+ done;
+# Polish is special case, because Apache treats gnusflashes.pl.include
+# as a Perl file. This is hopefuly a temprorary situation.
+ifeq ($(1), pl)
+ $(SED) --in-place "s/\(<!--#include file=\"gnusflashes*\)\(.include\"
-->\)/\1.polish\2/g" $(rootdir)/po/home.pl.m4
+else
+ [ ! -f $(rootdir)/gnusflashes.$(1).include ] || $(SED) --in-place
"s/\(<!--#include file=\"gnusflashes*\)\(.include\" -->\)/\1.$(1)\2/g"
$(rootdir)/po/home.$(1).m4
+endif
+ $(M4) $(rootdir)/po/home.$(1).m4 > $$@
+# To validate Catalan translations, add `ca' after `bg' and update the
+# variable `verbatim-templates' accordingly.
+# FIXME: Remove this conditional when GNUN operates in `www', where we
+# want to validate everything.
+ifneq (,$(findstring $(1),bg))
+ $(VALIDATESKIP) $(VALIDATE-HTML) $$@
+endif
+endef
+
+$(foreach h_lang,$(HOME_LINGUAS),$(eval $(call home_rules,$(h_lang))))
+### End of the homepages-specific rules ###
+
+### Rules for all other articles ###
+define article_pot_rules
+$(1).proto $(1).translinks: $(subst /po/,/,$(1).html)
+ $(VALIDATESKIP) $(VALIDATE-HTML) $$<
+ $(MAKE-PROTOTYPE) --input=$$< --generic=generic.html
--output=$(1).proto --translinks=$(1).translinks || \
+ ($(RM) $(1).proto $(1).translinks ; exit 1)
+ $(SED) --in-place "s/\$$$$Date.*\$$$$/<gnun>\0<\/gnun>/g" $(1).proto
+
+$(1).pot: $(1).proto
+ $$(addfile)
+ $$(generate-pot)
+endef
+
+define article_rules
+$(1).po: $(basename $(1)).pot
+ $(check-po)
+ $(MSGMERGE) --update $$@ $$<
+ touch $$@
+
+$(subst /po/,/,$(1).html): $(basename $(1)).proto $(basename $(1)).translinks
$(1).po generic.$(2).html
+ $$(addfile)
+ $(PO4A-TRANSLATE) $(PO4A_XHTMLFLAGS) $(PO4A-TRANSLATEFLAGS) --master
$$< --po $(1).po --localized $(1).m4
+ $(SED) --in-place
"s/\(<gnun>include(\`.*\)\([.]html')<\/gnun>\)/\1.$(2)\2/g" $(1).m4
+ $(SED) --in-place "s/<gnun>\(.*\)<\/gnun>/\1/g" $(1).m4
+ $(SED) --in-place ':egin;N;$$$$!begin;s/\([ \t]*\n[
\t]*\)\{3,\}<!--/\n\n<!--/g' $(1).m4
+ for replaceable in $(replaceable_includes); do \
+ $(SED) --in-place "s/\(<!--#include
virtual=\".*$$$$replaceable\)\(.html\" -->\)/\1.$(2)\2/g" $(1).m4; \
+ done;
+ $(M4) $(1).m4 > $$@
+ $(VALIDATESKIP) $(VALIDATE-HTML) $$@
+endef
+
+$(foreach base,$(ALL_BASE),$(eval $(call article_pot_rules,$(base))))
+# FIXME: This is close to hell. There should be an easier way to do it.
+$(foreach po_base,$(ALL_POS_BASE),$(eval $(call
article_rules,$(po_base),$(subst .,,$(suffix $(po_base))))))
+### End of all articles' rules ###
+
+# If VCS=always, add all necessary files. The templates' POT are not
+# handled for the moment, but they are more or less stable. Also,
+# there is no sense in adding home.pot as this should happen only once.
+# WARNING: This is horribly slow and is implemented just in case.
+ifneq (,$(findstring always,$(VCS)))
+vcs-add-always:
+ for file in $(template_translated) $(home_translated) $(ALL_POTS) \
+ $(articles_translated) $(wildcard generic.*.html); do \
+ ($(CVS) add $$file ; exit 0) ; done
+else
+vcs-add-always: ;
+endif
+
+# Special target to sync the original English articles from the `www'
+# repository. It is intended to be invoked by a fencepost cron job
+# and will be useful even when GNUN is deployed. Automatic adding and
+# removal is not implemented (except adding `verbatim-templates'), so
+# make sure to `cvs add'/`cvs remove' and commit the article when
+# editing gnun.mk.
+wwwdir := $(rootdir)/$(rootdir)/www
+orig-templates := $(addsuffix .html,$(template_translated_base))
+orig-articles := $(addsuffix .html,$(subst /po/,/,$(ALL_BASE)))
+files-to-sync := $(rootdir)/home.shtml $(orig-templates) $(orig-articles)
+abs-files-to-sync := $(subst $(rootdir)/,,$(files-to-sync))
+# Templates that are not gettextized, but are necessary to reside in
+# trans-coord for HTML validation at build time.
+verbatim-templates := $(addprefix server/,header.html footer.html \
+ header.af.html footer.af.html \
+ header.bg.html footer.bg.html)
+
+.PHONY: sync
+sync:
+# Synchronize all articles and report if an article has been deleted
+# from the master repository.
+ for file in $(abs-files-to-sync) ; do \
+ if [ ! -f $(wwwdir)/$$file ] ; then \
+ echo "Warning: $$file missing in www; update the variable?" \
+ | $(CVSSKIP) mail -s "sync: missing file" $(devel_addr) ; \
+ else \
+ cp -p --update $(wwwdir)/$$file $(rootdir)/$$file ; \
+ fi ; done
+# Copy all necessary templates that are not under GNUN's control and
+# `cvs add' them if VCS=yes.
+ for t in $(verbatim-templates) ; do \
+ if [ ! -f $(rootdir)/$$t ] ; then \
+ cp -p $(wwwdir)/$$t $(rootdir)/$$t \
+ && $(CVSSKIP) $(CVS) add $(rootdir)/$$t ; \
+ else \
+ cp -p --update $(wwwdir)/$$t $(rootdir)/$$t ; \
+ fi ; done
+ cd $(rootdir) ; \
+ $(CVSSKIP) $(CVS) commit -m \
+ "Automatic sync from the master www repository."
Index: server/gnun/README
===================================================================
RCS file: server/gnun/README
diff -N server/gnun/README
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ server/gnun/README 20 Feb 2008 09:11:07 -0000 1.1
@@ -0,0 +1,11 @@
+Dependencies
+------------
+GNU Make >= 3.81 (prereleases of 3.81 also work)
+GNU Sed
+GNU Gettext (>= 0.16 ?)
+GNU M4 >= 1.4
+GNU Guile >= 1.6
+po4a 0.32
+Libxml2 (>= 2.6.24, needed for XHTML validation only)
+W3C XHMTL 1.0 DTDs (needed for XHTML validation only)
+CVS (>= 1.12.9, needed if VCS operations are enabled)
Index: server/gnun/TODO
===================================================================
RCS file: server/gnun/TODO
diff -N server/gnun/TODO
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ server/gnun/TODO 20 Feb 2008 09:11:08 -0000 1.1
@@ -0,0 +1,110 @@
+GNUnited Nations TODO List -*-outline-*-
+
+* Present bugs
+
+** Po4a wraps the <script> of the FSF widget at /server/banner.html,
+ which makes it disfunctional. It seems that the problem is the
+ C++-style comment `// already a member...'. The solution would be
+ either to 1) Include a comment for translators that will appear in
+ PO message not to include it; 2) Delete it somehow automatically; 3)
+ Persuade Matt not do to such things.
+
+** <meta> elements not translatable.
+
+* General (when bugs are fixed)
+
+** The documentation is not complete, and should be improved.
+
+** Experiment with msgmerge's `--previous' option and make it the
+ default, if feasible. Requires gettext >= 0.16.
+
+** Write a script that will itself invoke $(MAKE), log all output in a
+ file and cvs commit everything ought to be committed. Deal with SSH
+ woes in order the whole operation to be performed automatically.
+
+** GNU Coding Standards compliance.
+
+*** Standardize all variables'/rules' names.
+
+*** Wrap long lines where possible.
+
+** Add a `check' target (probably using Autoconf or DejaGNU) that would
+ test the environment and all the tools we use.
+
+** Handle errors properly.
+ When make-prototype fails, a proper mail with the error message
+ should be sent to www-discuss. Likewise, if a translator commits a
+ PO file that is not valid (perhaps this will be very common, at
+ least in the beginning).
+
+* Expected problems
+
+** make-prototype.scm uses a regexp to split the articles in pieces.
+ That regexp might not fit to all articles, that's why it has to be
+ tested with as many as possible.
+
+** RTL.
+
+** Complicated articles like /philosophy/eldred-amicus.
+
+* Non-essential
+
+** Implement a `report' target that would be language specific and will
+ output the state of all files for a language team, and extended
+ `full-report' that will check the activity of all teams for a
+ certain period. For language teams, a `msgfmt --statistics'-similar
+ output would be sufficient, as a start (probably omiting files that
+ are 100% complete). (This could be done with a script too.)
+
+** It would be nice to add some preprocessing logic to include specific
+ HTML comments into the POT, like:
+
+ <!-- TRANSLATORS: Do not translate foo as bar, because mumbo jumbo.
+ Read keleme.html for more info. -->
+
+ This could be useful for some articles under /licenses and for
+ several other occasions.
+
+** When commiting automated changes, find a way to generate meaningful
+ CVS log entries, describing the changes. Something like:
+
+ ,----
+ | Atomatically generated commit message by GNUnited Nations.
+ |
+ | * po/home.pot: $(actual log entry of home.shtml used by the $webmaster).
+ | * philosophy/bdk.fa.html: Adding Farsi translation # or whatever the
+ | # Persian leader
+ | # wrote while
+ | # commiting the
+ | # PO file
+ | * gnu/linux-and-gnu.bg.html: Impoved foo (Closes: bug #1234).
+ `----
+
+ Possible implementation is this: When a file is modified, an extra
+ command will append the cvs log message from the original file.
+ Upon successful make && commit, this log file will be deleted. In
+ case of failure, it will not be deleted so that the accumulated
+ messages will be used in the next run.
+
+** Figure out how to "inject" a language-specific warning, possibly
+ from /prep/i18n/outdated.xx.html that will be displayed when the
+ page has 20% (or more) messages untranslated. We have to think
+ also about a deprecation plan for all gnu.org translated pages, and
+ whether this software can help sorting all issues out. Idea: We
+ can use the comment <!-- Automatically generated... --> to add a
+ fake #include directive, which will tell Apache that this page is
+ OK, but in its absence will direct to a separate page (like 404)
+ with a a notice that the translation is very outdated and
+ links/options like 1) Visit the English article; 2) Visit the
+ translation anyway; 3) Help the Foo translation team; 4) Whatever
+ we decide.
+
+** PO mode a bit unsuitable for HTML translations.
+ The window that gets opened when you hit <RET> on a msgstr in PO
+ mode is in Fundamental mode, which leads to many typos that stem
+ from the fact that font lock for HTML is not available. Ideally,
+ we should find a way to provide a custom code to override PO mode's
+ default behaviour. Perhaps even a simple facility to convert a
+ standard PO header as generated by Po4a to the recommended format,
+ plus probably other useful things that would save purely mechanical
+ work.
Index: server/gnun/fdl.texi
===================================================================
RCS file: server/gnun/fdl.texi
diff -N server/gnun/fdl.texi
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ server/gnun/fdl.texi 20 Feb 2008 09:11:08 -0000 1.1
@@ -0,0 +1,451 @@
address@hidden The GNU Free Documentation License.
address@hidden Version 1.2, November 2002
+
address@hidden This file is intended to be included within another document,
address@hidden hence no sectioning command or @node.
+
address@hidden
+Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc.
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
address@hidden display
+
address@hidden 0
address@hidden
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document @dfn{free} in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
address@hidden
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The ``Document'', below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as ``you''. You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section
+of the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject. (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not ``Transparent'' is called ``Opaque''.
+
+Examples of suitable formats for Transparent copies include plain
address@hidden without markup, Texinfo input format, address@hidden input
+format, @acronym{SGML} or @acronym{XML} using a publicly available
address@hidden, and standard-conforming simple @acronym{HTML},
+PostScript or @acronym{PDF} designed for human modification. Examples
+of transparent image formats include @acronym{PNG}, @acronym{XCF} and
address@hidden Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, @acronym{SGML} or
address@hidden for which the @acronym{DTD} and/or processing tools are
+not generally available, and the machine-generated @acronym{HTML},
+PostScript or @acronym{PDF} produced by some word processors for
+output purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+A section ``Entitled XYZ'' means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as ``Acknowledgements'',
+``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title''
+of such a section when you modify the Document means that it remains a
+section ``Entitled XYZ'' according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
address@hidden
+VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
address@hidden
+COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
address@hidden
+MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
address@hidden A
address@hidden
+Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document). You may use the same title as a previous version
+if the original publisher of that version gives permission.
+
address@hidden
+List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has fewer than five),
+unless they release you from this requirement.
+
address@hidden
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
address@hidden
+Preserve all the copyright notices of the Document.
+
address@hidden
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
address@hidden
+Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.
+
address@hidden
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
address@hidden
+Include an unaltered copy of this License.
+
address@hidden
+Preserve the section Entitled ``History'', Preserve its Title, and add
+to it an item stating at least the title, year, new authors, and
+publisher of the Modified Version as given on the Title Page. If
+there is no section Entitled ``History'' in the Document, create one
+stating the title, year, authors, and publisher of the Document as
+given on its Title Page, then add an item describing the Modified
+Version as stated in the previous sentence.
+
address@hidden
+Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on. These may be placed in the ``History'' section.
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.
+
address@hidden
+For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
+the Title of the section, and preserve in the section all the
+substance and tone of each of the contributor acknowledgements and/or
+dedications given therein.
+
address@hidden
+Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles. Section numbers
+or the equivalent are not considered part of the section titles.
+
address@hidden
+Delete any section Entitled ``Endorsements''. Such a section
+may not be included in the Modified Version.
+
address@hidden
+Do not retitle any existing section to be Entitled ``Endorsements'' or
+to conflict in title with any Invariant Section.
+
address@hidden
+Preserve any Warranty Disclaimers.
address@hidden enumerate
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties---for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
address@hidden
+COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled ``History''
+in the various original documents, forming one section Entitled
+``History''; likewise combine any sections Entitled ``Acknowledgements'',
+and any sections Entitled ``Dedications''. You must delete all
+sections Entitled ``Endorsements.''
+
address@hidden
+COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
address@hidden
+AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an ``aggregate'' if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
address@hidden
+TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled ``Acknowledgements'',
+``Dedications'', or ``History'', the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
address@hidden
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License. Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License. However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
address@hidden
+FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
address@hidden://www.gnu.org/copyleft/}.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
address@hidden enumerate
+
address@hidden
address@hidden ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
address@hidden
address@hidden
+ Copyright (C) @var{year} @var{your name}.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.2
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
address@hidden group
address@hidden smallexample
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the address@hidden'' line with this:
+
address@hidden
address@hidden
+ with the Invariant Sections being @var{list their titles}, with
+ the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
+ being @var{list}.
address@hidden group
address@hidden smallexample
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
address@hidden Local Variables:
address@hidden ispell-local-pdict: "ispell-dict"
address@hidden End:
+
Index: server/gnun/generic.af.html
===================================================================
RCS file: server/gnun/generic.af.html
diff -N server/gnun/generic.af.html
Index: server/gnun/generic.bg.html
===================================================================
RCS file: server/gnun/generic.bg.html
diff -N server/gnun/generic.bg.html
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ server/gnun/generic.bg.html 20 Feb 2008 09:11:08 -0000 1.1
@@ -0,0 +1,6 @@
+<p>ÐолÑ, докладвайÑе гÑеÑки и пÑедложениÑ
оÑноÑно бÑлгаÑÑÐºÐ¸Ñ Ð¿Ñевод
+ÑÑез
+<a href="https://savannah.gnu.org/bugs/?group=www-bg">ÑиÑÑемаÑа за
+пÑоÑледÑване на гÑеÑки</a>
+на <a href="https://savannah.gnu.org/projects/www-bg/">пÑоекÑа за
+пÑевод на www.gnu.org</a>. ÐлагодаÑим Ðи!</p>
Index: server/gnun/generic.pl.html
===================================================================
RCS file: server/gnun/generic.pl.html
diff -N server/gnun/generic.pl.html
Index: server/gnun/generic.zh-cn.html
===================================================================
RCS file: server/gnun/generic.zh-cn.html
diff -N server/gnun/generic.zh-cn.html
Index: server/gnun/gnun.mk
===================================================================
RCS file: server/gnun/gnun.mk
diff -N server/gnun/gnun.mk
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ server/gnun/gnun.mk 20 Feb 2008 09:11:08 -0000 1.1
@@ -0,0 +1,45 @@
+# Copyright (C) 2007, 2008 Free Software Foundation, Inc.
+
+# This file is part of GNUnited Nations.
+
+# GNUnited Nations is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+
+# GNUnited Nations is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with GNUnited Nations. If not, see <http://www.gnu.org/licenses/>.
+
+TEMPLATE_LINGUAS := af bg
+
+HOME_LINGUAS := bg pl zh-cn
+
+ROOT := keepingup \
+ provide
+
+gnu := gnu \
+ gnu-history \
+ linux-and-gnu \
+ rms-lisp \
+ why-gnu-linux
+
+philosophy := bdk \
+ can-you-trust \
+ eldred-amicus \
+ free-software-for-freedom \
+ free-sw \
+ java-trap \
+ open-source-misses-the-point \
+ philosophy \
+ right-to-read \
+ schools \
+ software-literary-patents \
+ sun-in-night-time
+
+ALL_DIRS := gnu \
+ philosophy
Index: server/gnun/gnun.texi
===================================================================
RCS file: server/gnun/gnun.texi
diff -N server/gnun/gnun.texi
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ server/gnun/gnun.texi 20 Feb 2008 09:11:08 -0000 1.1
@@ -0,0 +1,969 @@
+\input texinfo
address@hidden %**start of header
address@hidden gnun.info
address@hidden GNUnited Nations Manual
address@hidden FIXME: Would be nice to have it in the format `%:b %:d, %:y', but
address@hidden in English.
address@hidden lastupdate 20.02.2008
address@hidden %**end of header
+
address@hidden Please do not use features of Texinfo >> 4.8, which is the
version
address@hidden available in gNewSense. Thanks.
+
address@hidden FIXME: Add more xrefs, where appropriate.
address@hidden FIXME: Add indexing commands.
+
address@hidden
+
+This manual is for @acronym{GNU}nited Nations, a suite for maintaining
+translations of www.gnu.org essays and other address@hidden
+Last updated on @value{lastupdate}.
address@hidden 1
+Copyright @copyright{} 2008 Free Software Foundation, Inc.
+
address@hidden
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the @acronym{GNU} Free Documentation License,
+Version 1.2 or any later version published by the Free Software
+Foundation; with no Invariant Sections, no Front-Cover Texts, and no
+Back-Cover Texts. A copy of the license is included in the section
+entitled address@hidden Free Documentation License.''
address@hidden quotation
address@hidden copying
+
address@hidden
address@hidden GNUnited Nations Manual
address@hidden Software for maintaining www.gnu.org translations
address@hidden (last updated @value{lastupdate})
address@hidden by Yavor Doganov <@email{yavor@@gnu.org}>
address@hidden
address@hidden 0pt plus 1filll
address@hidden
address@hidden titlepage
+
address@hidden
+
address@hidden Localization
address@hidden
+* GNUnited Nations: (gnun). Maintaining gnu.org translations.
address@hidden direntry
+
address@hidden
address@hidden Top
address@hidden GNUnited Nations
address@hidden
address@hidden ifnottex
+
address@hidden
+* Introduction:: Overview of GNUnited Nations.
+* Usage:: Basic usage, invocation and tips.
+* Internals:: Dive into @acronym{GNUN}.
+* Index::
+* Copying This Manual:: The GNU Free Documentation License.
address@hidden menu
+
address@hidden Introduction
address@hidden Introduction to @acronym{GNU}nited Nations
+
address@hidden Nations (abbreviated @acronym{GNUN}) is a
+collection of makefiles and scripts that are supposed to make the life
+of @url{http://gnu.org} translators easier. Although it is
+specifically developed for the @acronym{GNU} Project's website, it
+could be customized, at least in theory, to fit the needs of other
+internationalized sites. @acronym{GNUN} is in early stage of
+development, but if it proves useful, and if there is sufficient
+interest (and time), it is possible to develop a robust configuration
+interface that would be appropriate for general usage.
+
+It is vitally important to understand that @acronym{GNUN} is
address@hidden a silver bullet that solves all problems. If we have to be
+honest, deploying @acronym{GNUN} in fact even does create some
+(@pxref{Disadvantages}).
+
address@hidden Nations is free software, available under the
address@hidden General Public License.
+
+This manual is organized in way that is suitable both for translators
+and @acronym{GNU} Web Translation managers (plus eventually interested
address@hidden Webmasters, if any). It may also serve as an
+introductory material and reference for new @acronym{GNUN} developers
+and contributors. Hopefully, it might be useful to people who
+customize and adopt the software for a third party site or for their
+own needs. Feel free to skip sections or entire chapters if they are
+irrelevant for your intended usage.
+
+This manual is free documentation, and you can modify and redistribute
+it under the terms of the @acronym{GNU} Free Documentation License.
address@hidden This Manual, ,GNU Free Documentation License}.
+
address@hidden
+* Overview:: What is @acronym{GNUN} and why is necessary?
+* Concepts:: Basic concepts and goals.
+* Advantages:: The goodness @acronym{GNUN} brings.
+* Disadvantages:: Staying on firm ground.
address@hidden menu
+
address@hidden Overview
address@hidden Why @acronym{GNUN} is Being Developed
+
+The @acronym{GNU} Project's website, @uref{http://www.gnu.org}, has
+become considerably large over the years. Maintaining it requires
+significant effort, and sometimes a new web standard is developed
+faster than the time required to migrate all articles to the next
+widely adopted one.
+
+When it comes to internationalization, the problems are so many that
+it is hard to enumerate them. It has become apparent that maintaining
+translations up-to-date is a major undertaking, involving tedious
+skimming through commit logs, reviewing diffs and other medieval
+techniques to catch up. Some translation teams have developed their
+own sets of scripts, but so far there has been no universal solution.
+
+This unpleasant situation, combined with rapid and incompatible
+design changes, have lead some teams to neglect the important work of
+keeping their translation in line with the changing original
+articles. As a consequence, the @acronym{GNU} Project is facing the
+problem of maintaining them in suboptimal ways, in order to keep the
+information updated.
+
+The reasons for developing @acronym{GNU}nited Nations are very similar
+to those that lead to the inception of @acronym{GNU} gettext, or
address@hidden Documentation Utilities (@code{gnome-doc-utils}) some
+years later.
+
address@hidden Concepts
address@hidden What @acronym{GNU}nited Nations is and Should be
+
+The basic concept behind @acronym{GNUN} is that localization of HTML
+articles is similar to localization of computer programs. In
+articles, like in programs, not every string is considered
+translatable, so translatable strings must be identified first, and
+then collected in a file (called ``PO template'') for translation.
+Articles, like programs, tend to change in time, but not every change
+in the sources calls for a translation update. Sometimes the change
+does not affect the translatable strings, but sometimes it does. So,
+translators must have means to identify those changes and apply the
+appropriate updates to the translation.
+
+The @acronym{GNU} @code{gettext} package already provides the needed
+infrastructure for maintaining translations using PO files.
address@hidden, , Introduction, gettext, GNU gettext tools}, for a basic
+overview. @acronym{GNU}nited Nations fills the gaps to apply this
+infrastructure to articles in @url{http://gnu.org} web
address@hidden process of converting HTML to PO and the other way
+around is performed using po4a (``po for anything''), see
address@hidden://po4a.alioth.debian.org}.}
+
+The following diagram summarizes the relation between the files
+handled by @acronym{GNUN}. It is followed by somewhat detailed
+explanations, which you should read while keeping an eye on the
+diagram. Having a clear understanding of these interrelations will
+surely help translators and web maintainers.
+
address@hidden
address@hidden
+.---<--- * Original ARTICLE.html
+|
+| .---> ARTICLE.pot ---> * ARTICLE.LANG.po --->---.
+`---+ |
+ `--->---. .------<----------------------------'
+ | |
+ | `---.
+ | +---> Translated ARTICLE.LANG.html
+ `-------'
address@hidden group
address@hidden example
+
+The indication @samp{*} appears in two places in this picture, and
+means that the corresponding file is intended to be edited by humans.
+The author or web maintainer edits the original
address@hidden@var{article}.html}, and translators edit
address@hidden@address@hidden All other files are regenerated
+by @acronym{GNUN} and any manual changes on them will be lost on the
+next run.
+
+Arrows denote dependency relation between files, where a change in one
+file will affect the other. Those automatic changes will be applied
+by running @samp{make -C prep/gnun}. This is the primary way to
+invoke @acronym{GNUN}, since it is implemented as a set of recipes for
address@hidden @code{make}.
+
+First, @acronym{GNUN} extracts all translatable strings from the
+original English article @address@hidden into
address@hidden@var{article}.pot}. The resulted file is suitable for
+manipulation with the various @acronym{GNU} @samp{gettext} utilities.
+It contains all original article strings and all translations are set
+to empty. The letter @code{t} in @file{.pot} marks this as a Template
+PO file, not yet oriented towards any particular language.
+
+The first time though, there is no @address@hidden@var{lang}.po}
+yet, so a translator must manually copy @address@hidden to
address@hidden@address@hidden, where @var{lang} represents the
+target language. See FIXME:``Introducing new translation language for
+an article'' for details.
+
+Then comes the initial translation of messages in
address@hidden@address@hidden Translation in itself is a whole
+matter, whose complexity far overwhelms the level of this manual.
+Nevertheless, a few hints are given in some other chapter of this
+manual (FIXME:Translators (but only if we would like to include some
+practical advices to candidate translators on how to join a gnu.org
+translating team)). You will also find there indications about how to
+contact translating teams, or becoming part of them, for sharing your
+translating concerns with others who target the same native language.
+
+You may use any compatible PO editor to add translated messages into
+the PO file. @xref{Editing, , Editing, gettext, GNU gettext tools},
+for more information.
+
+When the PO file actually exists (hopefully populated with initial
+translations), @acronym{GNUN} generates
address@hidden@address@hidden file. It takes its structure
+from the original @address@hidden, but all translatable
+strings are replaced with their translations specified in
address@hidden@address@hidden
+
+Original articles sometimes change. A new paragraph is being added or
+a tiny change in the wording is introduced. Also, some articles are
+dynamic in nature, like ones containing news entries or a list of
+other articles. If the original article changes, @acronym{GNUN} will
+automatically rebuild @address@hidden, and will merge the
+changes to @address@hidden@var{lang}.po}. Any outdated
+translations will be marked as fuzzy, any new strings will be added
+with empty translations, waiting to be translated. In the same run
address@hidden@address@hidden will be rebuilt so the relevant
+strings in the translation will be substituted with the original
+English text, until the translation teams update them in
address@hidden@address@hidden
+
+Those changes in the original article that do not affect the
+translatable strings will not lead to changes in
address@hidden@address@hidden Thus, no actions from translators
+will be needed. @address@hidden@var{lang}.html} will be
+automatically regenerated to reflect the changes.
+
+FIXME: The following paragraphs should go to a separate section that
+explains those details like exact paths in www, diagram with the basic
+directory layout, additional files like .translinks, etc.
+
+The POT for every article under @acronym{GNUN}'s control is kept in
+the `www' repository under a special directory @file{po/}, which is a
+sub-directory of the relevant directory in the `www' tree. So, for
address@hidden://www.gnu.org/philosophy/free-sw.html} that is
address@hidden/po/}. Except @file{free-sw.pot}, this directory
+holds the canonical source of every translation, like
address@hidden, @file{free-sw.ca.po}, etc.
+
+Several additional features are implemented, like automatic update of
+the list of the available translations. For example, if a new
+translation is added and the list of translations in
address@hidden is updated, all translated
address@hidden@var{lang}.html} will be regenerated. This saves a lot
+of tedious, repetitive work. There is a basic infrastructure to
+``inject'' general information about a translation team---like a note
+how to contact the team, or how to report a bug/suggestion for
+improvement. Translators' credits are also handled, as well as
+translators' notes, if any.
+
address@hidden can be extended, and new features will certainly be
+added. The @file{TODO} file currently lists some of them, but new
+ideas pop up quite often. The plan is to make a solid foundation and
+develop front-ends---a web front-end, possibly based on Pootle, a
+statistics facility, probably a wiki compiler, and more.
+
address@hidden Advantages
address@hidden Major Advantages of @acronym{GNUN}
+
+Here is a simple list of situations where we hope this suite would
+prove to be useful.
+
address@hidden
address@hidden
+Automatic rebuild of all translations when the original article
+changes. This is the most important feature, as it prevents
+accumulation of seriously outdated translations.
+
address@hidden
+Global update of the whole site. Apply the previous point to the web
+server templates (under @file{server/} in the `www' repository). A
+single change to such a file will affect literally @emph{all}
+articles, translated or not.
+
address@hidden
+Urgent notices. Sometimes an ``urgent'' notice is added by the
+webmasters, which should appear on all pages. Typically this is about
+an event where urgent action is needed, although often it is only
+relevant to a single country or even a particular city. Such a notice
+will propagate to all pages, and translators may choose whether to
+translate it or not. For example, the Urdu translation team may
+conclude that there are only a few Urdu speakers in Massachusetts, to
+participate in an event that will happen in Boston, so translating the
+``urgent'' notice may not be very ``urgent'' for Urdu. However, such
+notice will appear in all translated pages and people who usually read
+gnu.org pages in their native language will see it, so they can take
+action as necessary. When the notice is removed, often in a week or
+two, it will disappear without translators' intervention, whether they
+translated it or not.
+
address@hidden
+Simplification of the translation process---lots of errors and typos
+come from the fact that translators basically have to duplicate the
+whole HTML markup of the original. The PO files eliminate most of the
+basic markup, which is where most of the validation errors come from.
+
address@hidden
+Markup consistency site-wide---it would be substantially easier to
+update the site to a future standard, because translations will
+naturally follow the changes in the original articles. This also
+means that translation teams do not have to undergo the boring process
+of converting their articles to the new @acronym{SSI}-based layout;
+this will be done automatically.
+
address@hidden
+Easy updates by translators. Modified paragraphs, links, etc. will
+appear as ``fuzzy'' strings in the PO files, newly added ones will
+appear as ``untranslated'', and deleted will appear as ``obsolete''.
+It is substantially easier to update a PO file, where a keystroke
+takes you to the part that needs updating, whatever it may be.
+
address@hidden
+Reporting and statistics. Since the basis is standard PO files, which
+are the canonical source of the translations, it is easy to manipulate
+them and extract useful information.
address@hidden itemize
+
address@hidden Disadvantages
address@hidden Known Bugs and Limitations
+
+As it happens in real life, we don't wear pink glasses and are aware
+of certain limitations and annoyances of this semi-automatic system.
+
address@hidden
address@hidden
+Often it is hard to figure out where precisely a change was made. A
+change in one single word in a long paragraph of the HTML article will
+lead to the whole of it being marked as ``fuzzy'' in the PO files. So
+don't unsubscribe from @email{www-commits@@gnu.org} yet, and be
+prepared to check the CVS history of the original article.
+
address@hidden
+We plan to invoke a build once a day, because doing it more often will
+potentially generate more messages to the mailing list in the form of
+commit notifications. This has its drawback, since translators will
+have to wait for a day until their PO files are updated, and another
+day for the @address@hidden articles to get generated, after
+they commit the updated POs.
+
address@hidden
+Currently there is no way a translation team can take advantage of
address@hidden while following their own translation process, because
+the suite is tied to the official repository. We hope that we will
+resolve this problem soon.
address@hidden itemize
+
address@hidden Usage
address@hidden General Usage
+
address@hidden
+If anything may go wrong, it will definitely go wrong.
+---Murphy's Law
+
+Murphy is an optimist.
+---O'Rielly's Law
address@hidden flushright
address@hidden 1
+
address@hidden currently consists of a few makefiles, scripts and
+optional @address@hidden files, intended to contain
+article-independent but team-specific information. They are designed
+to reside in the @file{prep/gnun/} directory, but this may change. In
+all examples in this manual, ``invoking'' means executing on the
+command line @command{make -C prep/gnun/ address@hidden
address@hidden@var{value} @dots{}]} while the working directory is
+the root in the `www' web repository. For the purpose of brevity, we
+will refer to the above command as simply @command{make}, which is
+equivalent to @command{cd prep/gnun ; make}. It is desirable never to
+invoke @command{make} with the @option{-k} (@option{--keep-going})
+option, because an eventual error in only one make recipe might create
+a mess in many articles, both original and translated. Do this with
+caution, and generally only when debugging in a safe environment.
+
+The build process is intended to be invoked by a cron job, although
+manual intervention to a certain degree is possible.
+
address@hidden
+* Invoking GNUN:: How to trigger a (re)build.
+* Main Variables:: Specifying what to build.
+* PO Files:: The gentle art of editing PO files.
address@hidden menu
+
address@hidden Invoking GNUN
address@hidden Invoking GNUN
+
+The central part of @acronym{GNU}nited Nations is a makefile; actually
+a @file{GNUmakefile} since it heavily relies on features and
+extensions available in @acronym{GNU} Make. Thus, invoking a build
+consists of typing @command{make} on the command line, or within cron.
+If you are deploying the software on a non-GNU machine, probably
address@hidden Make is installed and available as @command{gmake}. If
+not, you should seriously consider installing it, since as far as we
+know, the build will fail otherwise. See
address@hidden://www.gnu.org/software/make} for information how to
+download and install @acronym{GNU} Make.
+
+If you don't specify a target, @command{make} by default builds the
+target @code{all}, which in this case is to rebuild all translations
+that are not up-to-date. However, there are special targets that do
+not depend on the standard @code{all} target, which can be built by
address@hidden @var{target}}. Some of the variables in the next
+section apply to them, and some do not.
+
address@hidden
+* Runtime Variables:: Variables to control the build process.
+* Special Targets:: Targets that are not built by default.
address@hidden menu
+
address@hidden Runtime Variables
address@hidden Variables to Control the Build Process
+
+The build process has several modes of operation, and they all relate
+to the handling of files that are to be added to the repository or
+performing certain sanity checks at build time. The variables are
+specified on the command line, after @command{make}, in the form
address@hidden, e.g. @command{make VCS=yes}. In the future,
+additional features will be implemented in a similar fashion.
+
address@hidden @samp
address@hidden VCS=no
address@hidden @dots{}
+Do not add any files to the repository. This is the default. You may
+as well omit to define @code{VCS} entirely; there is no special code
+that expects assigning the value `no'.
+
address@hidden VCS=yes
+Automatically add any new files in the repository. These are any POT
+files, if they are generated for the first time, and the translated
+articles (@address@hidden) in HTML format. In addition, if
+there is no @file{prep/gnun/address@hidden file for the
+specific language an article is being generated, an empty file will be
+added. Finally, any missing PO and their HTML counterparts of the
+server templates will be added, computed on the basis of the
address@hidden variable.
+
address@hidden VCS=always
+Because @acronym{GNU} Make considers the targets up-to-date after a
+successful build, if it was performed with no VCS interaction, the
+important newly created files will not be added (and committed when
+you do @command{cvs commit}) in the repository. Assigning this value
+enables additional check and forcefully adds all files. Use it
+sparingly, since it is very slow and generally less reliable.
+
address@hidden VALIDATE=no
address@hidden @dots{}
+Does not perform validation of the HTML articles and PO files. This
+is the default, and not defining this variable has the same effect.
+
address@hidden VALIDATE=yes
+Validates all original articles before generating the POTs, to ensure
+that the ultimate source is valid XHMTL. Also, validates all
+generated translations in HTML format and all PO files. It is highly
+recommended to run the build this way, even if it is a bit tedious to
+fix the errors that are reported as a result of enforcing validation.
address@hidden table
+
+Note that @code{VCS=yes,always} is a valid combination: because POT
+files of the server templates are not handled by @code{always},
+running the build this way will commit any newly added files as
+specified in @code{TEMPLATE_LINGUAS} and will perform additional check
+at the end, @code{cvs add}-ing all necessary files.
+
address@hidden Special Targets
address@hidden Targets Specified on the Command Line
+
+Some targets are not built by default, because they are only useful
+under certain circumstances. Think of them like semi-automated
+commands or canned command sequences that are more complicated, and
+more importantly, whose arguments are variables computed at the time
address@hidden reads the makefiles---the filesets they affect are
+specific and already defined, one way or another.
+
address@hidden
+* sync::
+* clean::
+* distclean::
address@hidden menu
+
address@hidden sync
address@hidden The @code{sync} target
+
+The @code{sync} target has a simple task: synchronize the
address@hidden English} articles from a canonical repository, like
+`www'. It is very important that such synchronization happens,
+because it is desirable to develop the software and add more features
+in a testbed, while the `official instance' operates on the official
+repository in a predictable way.
+
+It is recommended that you `build' the @code{sync} target from a cron
+job, some time before the general build occurs. That way,
+prerequisites (e.g. original @file{.html} articles) will be updated
+from the canonical repository and the subsequent @command{make}
+invocation, possibly run by cron as well, will update all
+translations.
+
+The @code{VCS} variable affects the behavior: if it is defined to
+`yes' then the synchronized files are committed to the `testing'
+repository, e.g. the @var{destination}. In addition, if a file meant
+to be synchronized disappeared from the @var{source}, a warning mail
+will be sent to the address defined in the @code{devel_addr} variable
+(defined only in @file{GNUmakefile}). The build will continue without
+failure, and will sync and commit all other files, but will send the
+same email message again if the file is still present in the
address@hidden variable during a subsequent invocation.
+
+In addition, @code{sync} synchronizes all ``verbatim'' server
+templates that are not under @acronym{GNUN}'s control, such as
address@hidden/header.html}, @file{server/footer.html} and their
+translations, as defined in the @code{verbatim-templates} variable.
+This is important, as these files may change in the master repository,
+while the validation of the html files in the development repository
+will be performed with the old templates expanded, thus making this
+specific test more or less bogus.
+
address@hidden has no effect on this target, as well as
address@hidden
+
address@hidden clean
address@hidden The @code{clean} target
+
+Not implemented yet.
+
address@hidden distclean
address@hidden The @code{distclean} target
+
+Not implemented yet.
+
address@hidden Main Variables
address@hidden Defining Articles to be Built
+
+The file @file{gnun.mk} contains variable definitions, based on which
+almost all other important variables are computed. In other words,
+the variables defined in that file directly affect the overall
+behavior of the build process.
+
+There are two types of variables, which are specifically separated in
+order to make translators' life easier: variables that translators are
+free to modify and variables that are modified by the web-translators
address@hidden because presumably, they are more familiar with
address@hidden Nations' internals. From a purely technical point
+of view, there is no difference.}, ideally after performing some local
+tests. A translation team leader should update only
address@hidden and @code{HOME_LINGUAS}; everything else is
+supposed to be built auto-magically, without manual intervention. If
+not, that is a bug that should be reported and fixed.
+
address@hidden @samp
address@hidden TEMPLATE_LINGUAS
+Add here your language code @emph{if and only if} you have all the
+server templates translated, and have committed
address@hidden/po/address@hidden and
address@hidden/po/address@hidden, as well as the templates
+that are not under @acronym{GNUN}'s control, like
address@hidden/address@hidden and
address@hidden/address@hidden
+
address@hidden HOME_LINGUAS
+Add your language code if you have already committed
address@hidden/address@hidden, that way the homepage for your language
+will be built. It is not acceptable to have your language code
+defined in this variable, but not in @code{TEMPLATE_LINGUAS}.
+
address@hidden ROOT
+Add here articles that are in the server root, like
address@hidden and @file{provide.html}. Always write only the
+basename of the article, i.e. if you add these two articles, the value
+of @code{ROOT} should be @code{keepingup provide}. This is true for
+all the variables that expect values in the form of article names.
+
address@hidden ALL_DIRS
+The list of directories containing articles, like @file{philosophy},
address@hidden, @file{licenses}, etc.
+
address@hidden gnu
address@hidden philosophy
address@hidden @address@hidden
+A space-separated list of basenames for articles residing in
address@hidden, for which POTs will be generated and updated when the
+original article changes. If an article is missing here, there is no
+way its translations to be maintained via @acronym{GNUN}.
address@hidden table
+
address@hidden PO Files
address@hidden Working with PO Files
+
+We anticipate that some gnu.org translators will find this format odd
+or inconvenient, if they never happened to work with PO files before.
+Don't worry, you will soon get accustomed to it. It is the
+established format for translations in the Free World, and you should
+have no problems if you have translated software before.
+
+The most efficient way to edit a PO file is using a specialized PO
+editor, because each of them represents and treats gettext messages in
+a consistent and predictable way. It is possible to edit a PO file
+with an ordinary plain text editor, but extra effort would be
+necessary to make it valid. Here is a list of widely used PO editors:
+
address@hidden
address@hidden
+PO mode. We recommend using @acronym{GNU} Emacs in PO mode, because
+Emacs is the program that is suitable for performing any task when it
+comes to maintaining the @acronym{GNU} Project's website. Provided
+that you have @acronym{GNU} gettext installed, any @file{.po} file you
+visit should automatically switch to PO mode. You can enable/disable
+it by @code{M-x po-mode @key{RET}}. On some @acronym{GNU}/Linux
+distros such as gNewSense, PO mode is available in a separate package,
address@hidden See @uref{http://www.gnu.org/software/gettext}.
+
address@hidden
+gTranslator---the @acronym{GNOME} PO editor. Has some known bugs, but
+they shouldn't affect gnu.org translations as formulas that express
+plural forms are not used. See
address@hidden://gtranslator.sourceforge.net}.
+
address@hidden
+KBabel---likewise for @acronym{KDE}. See
address@hidden://kbabel.kde.org}.
+
address@hidden
+Poedit---another editor that is based on the @code{wxWidgets}
+toolkit. See @uref{http://www.poedit.net}.
address@hidden itemize
+
address@hidden
+* New Translation:: How to start a new translation.
+* Migrating:: How to migrate an existing translation to a PO
+ format under @acronym{GNUN}'s control.
+* generic.LANG.html:: Specifying information that will propagate in
+ every translation in a certain language.
address@hidden menu
+
address@hidden New Translation
address@hidden Starting a New Translation
+
+To start a new translation, the easiest way is to copy the existing
+POT as @address@hidden, where @var{lang} is your language
+code. For example, to prepare for a new translation of the essay
address@hidden://www.gnu.org/philosophy/freedom-or-copyright.html}, you
+can simply do @command{cd philosophy/po ; cp freedom-or-copyright.pot
address@hidden and then edit the latter. If
address@hidden does not exist it is because either
+the article is not yet ``templated'' (i.e. migrated to the new style),
+or the @acronym{GNUN} maintainers have not yet added it to the value
+of the appropriate variable in @file{prep/gnun/gnun.mk}. In that
+case, just ask them to do the necessary in order the POT to be
+generated.
+
+You could also use the @command{msginit} utility that would populate
+the PO file header with the right information, provided your
+environment is set up correctly. @xref{msginit Invocation, ,,
+gettext, GNU gettext tools}.
+
+The PO file header as generated usually looks like this:
+
address@hidden
address@hidden
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2008-02-06 16:25-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: ENCODING"
address@hidden group
address@hidden example
+
+You have to edit the header to match the already established
+conventions, and the rules for gnu.org translations. Here is an
+example of a properly edited header:
+
address@hidden
address@hidden
+# Bulgarian translation of
http://www.gnu.org/philosophy/@/freedom-or-copyright.html
+# Copyright (C) 2008 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnu.org article.
+# Yavor Doganov <yavor@@gnu.org>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: freedom-or-copyright.html\n"
+"POT-Creation-Date: 2008-02-06 16:25-0500\n"
+"PO-Revision-Date: 2008-02-09 15:23+0200\n"
+"Last-Translator: Yavor Doganov <yavor@@gnu.org>\n"
+"Language-Team: Bulgarian <dict@@fsa-bg.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit"
address@hidden group
address@hidden example
+
+Notice the absence of the ``fuzzy'' marker; you should ``unfuzzy'' the
+header after entering the necessary information (this is done by
+simply pressing @key{TAB} in PO mode). The @code{PO-Revision-Date}
+is automatically filled in when you save the file in PO mode and in
+most of the other PO editors.
+
+The @code{Lanuage-Team} field should contain the mailing list on which
+the translation team can be reached---sometimes this is the alias
address@hidden@@gnu.org}, but in some cases it is a
+separate, address@hidden list.
+
+There are some special messages that appear in the POT and PO:
+
address@hidden @samp
address@hidden *GNUN-SLOT: TRANSLATOR'S NOTES*
+This is for translator's notes that are injected in the resulting
+translation. See FIXME:Foo, for more information. If your
+translation does not have notes, you @emph{must} translate this as a
+space, that is, @key{SPC}.
+
address@hidden *GNUN-SLOT: TRANSLATOR'S CREDITS*
+This is again optional, and should contain the name (and address) of
+the person who made the translation. For example:
+
address@hidden
+<b>Traduction</b>: Benjamin Drieu <a
+href="mailto:foo@@example.org"><foo@@example.org></a>, 2007,
+2008.
address@hidden example
+
+``Translate'' this string as a space (@key{SPC}) if you do not want
+your name to appear there.
address@hidden table
+
+Most of the PO editors do not wrap long lines that inevitably appear
+in @code{msgstr}'s. If that happens, long lines make reading
+subsequent diffs harder, and are generally annoying for most people.
+If this issue bothers you, you can ``normalize'' the already finished
+PO translation by executing on the command line @command{cat
address@hidden | msgcat - -o @var{file}.po}, before installing it in
+the repository. Either way, the build system will treat it is a valid
+PO file.
+
+It is highly desirable that you check if the PO file you finished
+translating (or editing) is valid, before committing it. This is done
+by running @command{msgfmt -cv -o /dev/null @var{file}} or by simply
+pressing @kbd{V} in PO mode. The build system automatically verifies
+each PO file when invoked with @code{VALIDATE=yes}, but you won't get
+a warm and fuzzy feeling if a stupid typo you made halts the whole
+update of all translations. Such things happen to everyone, so it is
+a good practice to check before you actually commit.
+
address@hidden Migrating
address@hidden Transforming existing translation in PO format
+
+Migrating an existing translation to a PO file format is basically
+editing the header as described in the previous section, and
+populating each of the messages by copying the already translated text
+and/or markup from the existing translation in HTML format in the
+relevant message.
+
+Typically, you will visit @file{po/address@hidden (in PO mode) and
address@hidden@var{lang}.html} (in HTML mode) in another buffer. Then you
+can copy a paragraph or an element from the latter and yank it in the
+relevant message in the former. Be extra careful, since this is the
+time to check @emph{precisely} that the translation corresponds to the
+original. Further changes will be reflected, but if your ``initial''
+PO file is not a 100% match, that would not necessarily mean that it
+is an improvement. Since it is very easy to do this kind of check,
+because the relevant @code{msgid} and @code{msgstr} appear one above
+the other in the same buffer (or the similar concept in other PO
+editors), please @emph{do} perform this initial sanity check even if
+you are confident that the translation you have been yanking strings
+from is a completely up-to-date translation.
+
+There is no need to delete the existing HTML translation,
address@hidden will automatically overwrite it. The only thing a
+translator should do is to commit the PO file in the repository.
+
+When an essay has been translated by several people through the years,
+it is important that this information is recorded and reflected in the
+PO file. In the future, special targets may be added to enable the
address@hidden to check who translated a particular article, and when.
+
+A recommended way to do this is as follows:
+
address@hidden
address@hidden
+# French translation of http://www.gnu.org/philosophy/@/bsd.html
+# Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnu.org article.
+# C@'edric Corazza <cedric.corazza@@wanadoo.fr>, 2006, 2008.
+# address@hidden Dominguez <taz@@gnu.org>, 2007.
address@hidden group
address@hidden example
+
+In this example, it is clear that C@'edric made the initial
+translation, address@hidden made some changes in 2007, and the original
+translator returned in 2008 and continued maintaining it.
+
address@hidden generic.LANG.html
address@hidden The @address@hidden file
+
+The files @file{prep/gnun/address@hidden are special: if no
+such file exists for your language, an empty file will will be created
+(and added to the repository if specified @code{VCS=yes}). This file
+is optional, and should contain a short message in your native
+language, ideally providing more information about the translation
+team or where to report bugs. For example:
+
address@hidden
+<p>To join the Fooish translation team, see <a
+href="http://gnu.org/@/server/@/standards/@/translations/@/www-foo">the
+Foo team homepage</a>.</p>
address@hidden example
+
+The contents of @address@hidden is injected right after
+the translators' credits, if any, and before the timestamp. It should
+be valid XHTML markup.
+
+When you modify this file, for example, adding a message to the
+existing empty file or changing a URL, such modification will affect
address@hidden articles of the language @var{lang} in
address@hidden@var{lang}.html}. The next time a build occurs, all
+translations of the language code @var{lang} (i.e. all
address@hidden@var{lang}.html}, including the homepage), will be modified to
+include the contents of this special file.
+
address@hidden Internals
address@hidden Unexciting Information for @acronym{GNUN}'s Operation
+
+This chapter might be of interest probably only to people who would
+have special interest in the software, plan to enhance it or develop a
+front-end.
+
address@hidden
+* Scripts:: Helper scripts.
+* Rules:: The knotty rules explained.
address@hidden menu
+
address@hidden Scripts
address@hidden Internally Used Scripts
+
+For the time being there are two helper scripts, used internally as
+commands with certain arguments in the makefile rules. They can be
+invoked separately, as stand-alone programs, and sometimes they are
+useful on their own.
+
address@hidden
+* make-prototype::
+* validate-html::
address@hidden menu
+
address@hidden make-prototype
address@hidden The @command{make-prototype} Script
+
+This is a Guile script which makes the ``prototype'' file,
address@hidden@var{lang}.proto}, from which the POT is generated.
address@hidden is designed in such a way, because it would be no big
+improvement if links to other translations ended up in the POT---it
+would mean that translators would have to manually update their PO
+file when a new translation is added.
+
+In addition, @command{make-prototype} guards the timestamp (the
address@hidden RCS keyword) in order the timestamp of the translation to
+be updated @emph{only} when there are actual changes, being automatic
+or not.
+
+Finally, @command{make-prototype} ``injects'' the artificial elements
+`*GNUN-SLOT: TRANSLATOR'S NOTES*' and `*GNUN-SLOT: TRANSLATOR'S
+CREDITS*', thanks to which it is possible to insert the name of the
+translator and translator's notes, if necessary. @xref{New
+Translation}.
+
+Here are the options that @command{make-prototype} accepts:
+
address@hidden @option
address@hidden --article
+Process the input file as an article. This is the default.
+
address@hidden --home
+Process the input article as a homepage. Specify this when you want
+to create a @file{.proto} file for a homepage.
+
address@hidden -i
address@hidden address@hidden
+Input file, which can be a common article (essay) or a homepage.
+
address@hidden -g
address@hidden address@hidden
+Common notes for a translation team; this is the
address@hidden@var{lang}.html} file. @xref{generic.LANG.html}.
+
address@hidden -o
address@hidden address@hidden
+The file where to write the output of the script.
+
address@hidden -t
address@hidden address@hidden
+The file containing the translation links. This makes sense only for
+articles, since the homepage has its own @file{translations.include}
+which gets included via an @acronym{SSI} directive.
address@hidden FIXME: This should be improved, it is not clear.
+
address@hidden --version
+Print copyright and version information on the standard output.
+
address@hidden --help
+Print usage information on stdout.
address@hidden table
+
address@hidden validate-html
address@hidden The @command{validate-html} Script
+
+This is a Bash script whose purpose is to ``validate'' both the
+original and translated articles to make sure that they conform to the
+respective @acronym{W3C} standard. Sometimes webmasters make
+mistakes, and translators too, so this tool is useful to catch errors
+of that kind.
+
address@hidden enforces XHTML validation at build time if invoked with
address@hidden
+
+The script expects only one @var{file} as an argument and will exit
+with an error if it is not specified (which might be the case when an
+automatic variable is not expanded properly due to a bug in the
+makefile).
+
address@hidden Rules
address@hidden How The Recipes Work
+
+Read the source for now.
+
address@hidden Copying This Manual
address@hidden GNU Free Documentation License
+
address@hidden fdl.texi
+
address@hidden Index
address@hidden Index
+
address@hidden cp
+
address@hidden
+
+Local Variables:
+eval: (add-hook 'write-file-hooks 'time-stamp)
+time-stamp-start: "@set lastupdate "
+time-stamp-end: "$"
+time-stamp-format: "%02d.%02m.%:y"
+compile-command: "texi2pdf -c gnun.texi"
+ispell-local-dictionary: "american"
+End:
Index: server/gnun/make-prototype
===================================================================
RCS file: server/gnun/make-prototype
diff -N server/gnun/make-prototype
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ server/gnun/make-prototype 20 Feb 2008 09:11:08 -0000 1.1
@@ -0,0 +1,181 @@
+#!/usr/bin/guile \
+-e main --debug -s
+!#
+
+;; Copyright (C) 2007, 2008 Free Software Foundation, Inc.
+
+;; This file is part of GNUnited Nations.
+
+;; GNUnited Nations is free software: you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation, either version 3 of the
+;; License, or (at your option) any later version.
+
+;; GNUnited Nations is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNUnited Nations. If not, see
+;; <http://www.gnu.org/licenses/>.
+
+(define version-message
+ (string-append
+ "make-prototype (GNUnited Nations) 0.1\n"
+ "Copyright (C) 2008 Free Software Foundation, Inc.\n"
+ "You may redistribute copies of GNUnited Nations\n"
+ "under the terms of the GNU General Public License.\n"
+ "For more information about these matters, see the file named COPYING.\n"))
+
+(define help-message
+ (string-append
+ "Usage: make-prototype OPTION...\n"
+ "\n"
+ "Input format specification:\n"
+ " --article Process input file as an article (default)\n"
+ " --home Process input file as a home page\n"
+ "\n"
+ "Input specification:\n"
+ " -i, --input=FILE Input file (article or home page)\n"
+ " -g, --generic=FILE Generic notes for a language team\n"
+ "\n"
+ "Output options:\n"
+ " -o, --output=FILE Output prototype\n"
+ " -t, --translinks=FILE Translations links (meaningful for articles
only)\n"
+ "\n"
+ " --version Just print version info and return\n"
+ " --help Print this usage information message\n"
+ "\n"
+ "Report bugs to address@hidden"))
+
+(define option-grammar
+ '((article (value #f))
+ (home (value #f))
+ (input (single-char #\i) (value #t))
+ (generic (single-char #\g) (value #t))
+ (output (single-char #\o) (value #t))
+ (translinks (single-char #\t) (value #t))
+ (version (value #f))
+ (help (value #f))))
+
+(define article-page-regexp
+ "^(.*)(<title>.*)(</div>.*<div id=\"footer\">.*)(<p>.*?[$]Date:.*)(<ul
class=\"translations-list\">.*</ul>)(.*)$")
+
+(define home-page-regexp
+ "^(.*?)(<title>.*)(</div>.*<div id=\"footer\">.*)(<p>.*?[$]Date:.*)$")
+
+(define skip-tag
+ "gnun")
+
+(define slot-translators-notes
+ (string-append
+ "\n"
+ "<div style=\"font-size: small;\">\n"
+ "<!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.-->\n"
+ "*GNUN-SLOT: TRANSLATOR'S NOTES*</div>\n"))
+
+(define slot-translators-credits
+ (string-append
+ "\n"
+ "<div class=\"translators-credits\">\n"
+ "<!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->\n"
+ "*GNUN-SLOT: TRANSLATOR'S CREDITS*</div>\n"))
+
+(define autogenerated-warning
+ "This file is automatically generated by GNUnited Nations!")
+
+(define <skip-tag>
+ (string-append "<" skip-tag ">"))
+
+(define </skip-tag>
+ (string-append "</" skip-tag ">"))
+
+(define <autogenerated-warning>
+ (string-append
+ <skip-tag> </skip-tag> "<!-- " autogenerated-warning " -->" "\n"))
+
+
+(use-modules (ice-9 regex)
+ (ice-9 rdelim)
+ (ice-9 getopt-long))
+
+(define (main args)
+ (let* ((options (catch 'misc-error
+ (lambda () (getopt-long args option-grammar))
+ (lambda (key subr message args data)
+ (die (apply format #f message args)))))
+ (opt (lambda args (apply option-ref options args))))
+ (cond ((opt 'version #f) (version))
+ ((opt 'help #f) (help))
+ ((and (opt 'article #f)
+ (opt 'home #f))
+ (die "conflicting options: `--article' and `--home'"))
+ ((not (opt 'input #f))
+ (die "no input file"))
+ ((not (opt 'generic #f))
+ (die "no generic file"))
+ ((not (opt 'output #f))
+ (die "no output file"))
+ ((opt 'home #f)
+ (and (opt 'translinks #f)
+ (die "`--translinks' makes no sense for home pages"))
+ (make-home (opt 'input #f)
+ (opt 'generic #f)
+ (opt 'output #f)))
+ ((opt 'article #t)
+ (or (opt 'translinks #f)
+ (die "no translinks file"))
+ (make-article (opt 'input #f)
+ (opt 'generic #f)
+ (opt 'output #f)
+ (opt 'translinks #f))))))
+
+(define (die message)
+ (display "make-prototype: " (current-error-port))
+ (display message (current-error-port))
+ (newline (current-error-port))
+ (exit 2))
+
+(define (version)
+ (display version-message))
+
+(define (help)
+ (display help-message))
+
+(define (make-article input generic output translinks)
+ (with-input-from-file input
+ (lambda ()
+ (let ((m (string-match article-page-regexp (read-delimited ""))))
+ (with-output-to-file output
+ (lambda ()
+ (display
+ (string-append (match:substring m 1)
+ <autogenerated-warning>
+ (match:substring m 2)
+ slot-translators-notes
+ (match:substring m 3)
+ slot-translators-credits
+ "<" skip-tag ">include(`" generic "')</" skip-tag
"> "
+ (match:substring m 4)
+ "<" skip-tag ">include(`" translinks "')</"
skip-tag ">"
+ (match:substring m 6)))))
+ (with-output-to-file translinks
+ (lambda ()
+ (display (match:substring m 5))))))))
+
+(define (make-home input generic output)
+ (with-input-from-file input
+ (lambda ()
+ (let ((m (string-match home-page-regexp (read-delimited ""))))
+ (with-output-to-file output
+ (lambda ()
+ (display
+ (string-append (match:substring m 1)
+ <autogenerated-warning>
+ (match:substring m 2)
+ slot-translators-notes
+ (match:substring m 3)
+ slot-translators-credits
+ "<" skip-tag ">include(`" generic "')</" skip-tag
"> "
+ (match:substring m 4)))))))))
Index: server/gnun/validate-html
===================================================================
RCS file: server/gnun/validate-html
diff -N server/gnun/validate-html
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ server/gnun/validate-html 20 Feb 2008 09:11:08 -0000 1.1
@@ -0,0 +1,63 @@
+#!/bin/bash
+
+# Copyright (C) 2008 Free Software Foundation, Inc.
+
+# This file is part of GNUnited Nations.
+
+# GNUnited Nations is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+
+# GNUnited Nations is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with GNUnited Nations. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+set -o pipefail
+
+if [ $# -ne 1 ]; then
+ echo 1>&2 Error: The script requires a FILE as argument.
+ exit 1
+fi
+
+ROOT=`dirname $0`/../..
+USERDTD=$HOME/dtd
+
+# Create two tempfiles and mark them for deletion on exit.
+TMP1=`mktemp -t gnun.1.XXXXXX`
+TMP2=`mktemp -t gnun.2.XXXXXX`
+trap "rm -f $TMP1 $TMP2" EXIT
+
+# Expand input file's #include directives and save the result in
+# $TMP1.
+cat $1 | sed "s/<\!--#include virtual=\"\/\?\(.*\)\" -->/include(\`\1')/g" \
+ | m4 -EE -I $ROOT > $TMP1
+
+# Execute xmllint on $TMP1 and save it's output to $TMP2.
+set +o pipefail
+set +e
+cat $TMP1 | xmllint --path "$USERDTD" --loaddtd --nonet --noout - 2> $TMP2
+LINTSTATUS=$?
+set -e
+set -o pipefail
+
+# Parse xmllint's error output (if any) and print it by inserting
+# additional context line after every occurrence of "line X" where X
+# is a decimal number. It is helpful to show the contents of those
+# mentioned lines, since xmllint runs on intermediate input file (with
+# expanded #include directives) and the translator can not easily look
+# up for references in it.
+cat $TMP2 | sed '
+ /line [[:digit:]]\+/ {
+ p
+ s=^.*line \([[:digit:]]\+\).*$=head -n \1 '"$TMP1"' | tail -n 1=
+ e
+ }'
+
+# Exit with xmlint's original exit status.
+exit $LINTSTATUS
Index: prep/gnun/ChangeLog
===================================================================
RCS file: prep/gnun/ChangeLog
diff -N prep/gnun/ChangeLog
--- prep/gnun/ChangeLog 20 Feb 2008 07:18:15 -0000 1.60
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,859 +0,0 @@
-2008-02-20 Yavor Doganov <address@hidden>
-
- * gnun.texi (Advantages): Clarify the usefulness of `urgent'
- notices propagation.
- (Concepts): Use double quotes for po4a's meaning.
-
-2008-02-19 Yavor Doganov <address@hidden>
- Kaloian Doganov <address@hidden>
-
- * make-prototype (slot-translators-notes)
- (slot-translators-credits): Inject hints for translators in the
- POT files in the form of comments.
-
-2008-02-18 Yavor Doganov <address@hidden>
-
- * GNUmakefile (generic_rules): Fixed a bug which prevented
- generic.af.html to be made.
- (GENERIC_LINGUAS, generic-var): New helper variables.
-
-2008-02-17 Yavor Doganov <address@hidden>
-
- * gnun.texi (Migrating): Add extra sentence to raise translators'
- attention.
- (New Translation, generic.LANG.html): Use @var{lang} instead of
- @code{xx} and the like.
-
- * GNUmakefile (verbatim-templates): Add Afrikaans templates.
- * gnun.mk (TEMPLATE_LINGUAS): Remove `fr' and add `af'.
-
-2008-02-16 Yavor Doganov <address@hidden>
-
- * gnun.texi (Concepts): Typo fix.
- (Disadvantages, Usage, Runtime Variables, New Translation)
- (Migrating, generic.LANG.html, make-prototype): Use @var{lang}
- instead of `xx' for consistency with the gettext manual.
-
-2008-02-15 Yavor Doganov <address@hidden>
-
- * README: Po4a 0.32 is the minimal requirement.
-
- * gnun.texi (Advantages): Fix grammar error.
- (sync): Document the new behavior wrt `verbatim-templates'.
- (Advantages, make-prototype): Use @acronym for SSI.
- (validate-html): Likewise for W3C.
-
-2008-02-14 Yavor Doganov <address@hidden>
-
- * gnun.texi (Concepts): Typo fix.
-
-2008-02-14 Kaloian Doganov <address@hidden>
-
- * gnun.texi (Concepts): More explanations and a diagram for the
- "big picture". Influenced by the relevant section in
- gettext.texi.
- (Advantages): Replace "immigrants" with "speakers".
-
-2008-02-13 Kaloian Doganov <address@hidden>
-
- * README: Mention "W3C XHMTL 1.0 DTDs" as an upstream package name
- instead of the Debian-specific one.
-
-2008-02-10 Yavor Doganov <address@hidden>
-
- * GNUmakefile: Various doc fixes.
-
- * gnun.texi (New Translation, Migrating): Use @group in the PO
- header examples.
- (Advantages): Mention that no extra work is required to migrate
- from the old style to new style.
-
-2008-02-09 Yavor Doganov <address@hidden>
-
- * gnun.texi: New file; basic skeleton of the documentation.
- * fdl.texi: Import from the canonical location.
-
-2008-02-08 Yavor Doganov <address@hidden>
-
- * GNUmakefile (generate-pot): Indent and use a workaround for
- Emacs font lock issue.
-
-2008-02-08 Kaloian Doganov <address@hidden>
-
- * validate-html: Enrich xmllint's error messages with additional
- context lines from the input file.
-
-2008-02-08 Yavor Doganov <address@hidden>
-
- Implement validation for PO files.
- * GNUmakefile (MSGFMT): New variable.
- (check-po): New variable containing the command to check the .po
- files.
- ($(template_dir)/po/%.$(1).po, $(rootdir)/po/home.$(1).po)
- ($(1).po): Use it.
-
-2008-02-07 Yavor Doganov <address@hidden>
-
- * GNUmakefile (verbatim-templates): New variable.
- (sync): Synchronize server templates that are not gettextized, to
- enable validation at build time.
- ($(rootdir)/home.$(1).shtml): Add a `trans-coord'-specific
- conditional to specify the languages we want to validate.
-
-2008-02-06 Yavor Doganov <address@hidden>
-
- * validate-html: Add license notice.
-
- * GNUmakefile (VALIDATESKIP): Use a more robust way to check the
- value of $(VALIDATE), like $(VCS).
-
-2008-02-06 Kaloian Doganov <address@hidden>
-
- * validate-html: Lookup for user-wide DTD resources in addition to
- the system wide catalog.
- * README: Mention w3c-dtd-xhtml as a dependency.
-
- * GNUmakefile (VALIDATE-HTML, VALIDATESKIP): New variables.
- ($(rootdir)/po/home.proto, $(1).proto $(1).translinks): Introduce
- validation for original HMTL files.
- ($(rootdir)/home.$(1).shtml, $(subst /po/,/,$(1).html)): Introduce
- validation for generated HTML files.
-
-2008-02-06 Yavor Doganov <address@hidden>
-
- * gnun.mk (gnu): Add `gnu-history', `linux-and-gnu' and
- `why-gnu-linux'.
- (philosophy): Add `can-you-trust', `free-software-for-freedom',
- `free-sw', `open-source-misses-the-point', `right-to-read' and
- `software-literary-patents'.
-
- * validate-html (FILE): Do not define it.
- Fix a typo in the sed expression.
- Instead of hanging, fail if no file is supplied as argument.
-
-2008-02-06 Kaloian Doganov <address@hidden>
-
- * validate-html: New script to validate XHTML files.
- * README: Mention two dependencies.
-
-2008-02-05 Yavor Doganov <address@hidden>
-
- * GNUmakefile (template_files): Remove `banner-homepage', deleted
- from the master `www' repository.
- (replaceable_includes): Likewise.
-
-2008-02-04 Yavor Doganov <address@hidden>
-
- * GNUmakefile (sync): If the file to sync was deleted from the
- `www' repository, send a warning mail to the list instead of
- failing with an error. Use $(CVSSKIP) to suppress the mail and
- commiting the synced files.
- (devel_addr): New variable.
-
-2008-02-01 Yavor Doganov <address@hidden>
-
- * GNUmakefile (template_files, sync): Revert last change; test
- successful.
-
-2008-02-01 Kaloian Doganov <address@hidden>
-
- * GNUmakefile (CVSOPTS): Replaced by...
- (CVSSKIP): ...which conditionally holds a command that suppresses
- $(CVS) invocations. All uses changed.
-
-2008-02-01 Yavor Doganov <address@hidden>
-
- * GNUmakefile ($(template_dir)/po/%.$(1).po): Revert last change.
- (template_files): Add `dummy' to test template_rules after the
- last snafu.
- (sync): Ignore errors from the first command just for the test,
- since it will definitely fail because dummy.html does not exist in
- the `www' repository.
-
-2008-01-31 Yavor Doganov <address@hidden>
-
- * GNUmakefile (.PRECIOUS): Depend on $(template_dir)/po/%.$(1).po.
- ($(template_dir)/po/%.$(1).po): Temporarily disable $(CVS)
- invocation, since the targets are already `cvs add'-ed.
-
-2008-01-30 Kaloian Doganov <address@hidden>
-
- * gnun.mk (philosophy): Add `java-trap' and `sun-in-night-time'.
-
-2008-01-30 Yavor Doganov <address@hidden>
-
- * GNUmakefile ($(template_dir)/po/%.$(1).po): Handle the case when
- webmasters add a new template file but translators cannot catch up
- immediately; simply copy the newly generated .pot as .xx.po for
- every language in TEMPLATE_LINGUAS.
- (replaceable_includes): Doc fix.
-
-2008-01-29 Yavor Doganov <address@hidden>
-
- * GNUmakefile (MV, TOUCH): Delete and invoke the programs
- directly. All uses changed.
- (template_files, replaceable_includes): Add `banner-homepage'.
-
-2008-01-29 Kaloian Doganov <address@hidden>
-
- * make-prototype:
- * GNUmakefile: Skip tag <gnu.org-i18n> is renamed to <gnun>.
- (generate-pot): Fixed bug of inverted logical operator.
-
-2008-01-28 Yavor Doganov <address@hidden>
-
- * make-prototype:
- * GNUmakefile:
- * gnun.mk: Use the new format of the license notice.
-
-2008-01-28 Kaloian Doganov <address@hidden>
-
- * make-prototype (slot-translators-notes)
- (slot-translators-credits): Strings changed to reflect the new
- project name (GNUN).
-
- * GNUmakefile (generate-pot): Fixed bug in variable quoting.
-
-2008-01-28 Yavor Doganov <address@hidden>
-
- * GNUmakefile (addfile_dbl): Delete and use double escaped
- `$(addfile)' instead. All uses changed.
-
-2008-01-28 Kaloian Doganov <address@hidden>
-
- Ignore POT-Creation-Date changes when they are the only changes in
- a pot-file.
- * GNUmakefile (MV): Define to mv.
- (generate-pot): New variable to hold canned sequence of commands.
- ($(template_dir)/po/%.pot, $(rootdir)/po/home.pot, $(1).pot): Use
- generate-pot instead of direct invocation of $(PO4A-GETTEXTIZE).
-
-2008-01-27 Yavor Doganov <address@hidden>
-
- * gnun.mk (philosophy): Add `philosophy' to test VCS=yes.
-
-2008-01-26 Yavor Doganov <address@hidden>
-
- Complete support for VCS=(yes|always).
- * GNUmakefile (CVS): Define to cvs.
- (vc-add-always): New conditional Phony target.
- (all): Depend on vcs-add-always.
- (generic_rules): Simplify and delete the double-colon rule; no
- longer needed. Remove Subversion-specific conditionals.
- ($(rootdir)/po/home.pot, $(rootdir)/home.$(1).shtml): Adjust as
- above.
- ($(template_dir)/po/%.pot, $(template_dir)/%.$(1).html, $(1).pot)
- ($(subst /po/,/,$(1).html)): Add ($addfile) or $(addfile_dbl) as
- first command to the recipe, where appropriate.
- (sync): Use the CVS variable for consistency.
-
-2008-01-26 Kaloian Doganov <address@hidden>
-
- * GNUmakefile (template_rules, home_rules)
- (article_rules): Reduce continuous whitespace with multiple
- newlines before a comment.
-
-2008-01-26 Yavor Doganov <address@hidden>
-
- Implement automatic synchronization of the original articles from
- `www'. Intended to be run by a cron job, since paths are
- hardcoded.
- * GNUmakefile (sync): New Phony target.
- (wwwdir, orig-templates, orig-articles): New variables.
- (files-to-sync, abs-files-to-sync): Likewise.
-
-2008-01-14 Yavor Doganov <address@hidden>
-
- * make-prototype (version-message): Update year to 2008.
-
-2008-01-13 Yavor Doganov <address@hidden>
-
- * make-prototype:
- * gnun.mk:
- * GNUmakefile: Update copyright years.
-
- * prep/i18n/i18n.mk: Rename to...
- * prep/gnun/gnun.mk: ...as agreed.
- * prep/gnun/GNUmakefile: Include gnun.mk.
-
-2007-12-31 Kaloian Doganov <address@hidden>
-
- * www/prep/i18n/GNUmakefile:
- * www/prep/i18n/i18n.mk:
- * www/prep/i18n/make-prototype: Fixed typo in the copyright
- notice.
-
-2007-12-31 Kaloian Doganov <address@hidden>
-
- * prep/i18n/make-prototype: Removed non-sense commented lines left
- out by mistake.
- (make-article, make-home): Removed old debug code. Insert an
- autogenerated warning message message in the output.
- (help-message): Fixed a typo in the command name.
- (slot-translators-note): Renamed to slot-translators-notes. All
- referrers changed.
- (skip-tag): New variable to hold the name of the skip tag
- "gnu.org-i18n" used to escape non-translatable strings.
- (<skip-tag>, </skip-tag>): Convenient shortcuts for using the
- value of skip-tag. All users of "gnu.org-i18n" literal changed.
- (article-page-regexp, home-page-regexp): Add one more capturing
- group before the "<title>" tag, where the warning message should
- be placed.
- (autogenerated-warning): New variable defining the warning
- message.
- (<autogenerated-warning>): A convenient shortcut for using the
- value of autogenerated-warning.
-
- * gnu/po/gnu.pot:
- * gnu/po/rms-lisp.pot:
- * home.bg.shtml:
- * home.pl.shtml:
- * home.zh-cn.shtml:
- * philosophy/po/bdk.pot:
- * philosophy/po/eldred-amicus.pot:
- * philosophy/po/schools.bg.po:
- * philosophy/po/schools.pot:
- * philosophy/schools.bg.html:
- * po/home.bg.po:
- * po/home.pl.po:
- * po/home.pot:
- * po/home.zh-cn.po:
- * po/keepingup.pot:
- * po/provide.pot:
- * server/po/banner.pot:
- * server/po/footer-text.pot: Regenerate forcefully with `make -B'
- to enforce the inclusion of the "automatically generated" warning
- message.
-
-2007-12-29 Kaloian Doganov <address@hidden>
-
- * prep/i18n/make-prototype: New script. Combines functionality
- from make-prototype.scm and make-prototype-home.scm, which both
- are now obsolete. Includes sane command line parser and brief
- help.
- * prep/i18n/make-prototype.scm: Deleted.
- * prep/i18n/make-prototype-home.scm: Deleted.
- * prep/i18n/GNUmakefile: Updated calls to
- prep/i18n/make-prototype.
-
-2007-12-28 Yavor Doganov <address@hidden>
-
- Initial partially working VCS support for generic.xx.html and the
- homepages.
- * prep/i18n/GNUmakefile (CVS): New variable.
- (CVSOPTS): New conditionally defined variable, based on the value
- of VCS.
- (addfile, addfile_dbl): Define command sequences for convenience.
- (generic_rules): Use them. Implement a conditional double-colon
- template rule and modified commands based on VCS=always and
- CVS=svn.
- ($(rootdir)/po/home.pot, $(rootdir)/home.$(1).shtml): Add
- conditional commands for adding the targets under VCS control.
- Does not work reliably (or should I say "at all") with `make
- VCS=always' when the targets are considered up-to-date.
-
-2007-12-12 Yavor Doganov <address@hidden>
-
- * home.bg.shtml: Regenerate.
-
- First real simulation of the new translation process.
- * po/home.bg.po: Translated fuzzy/untranslated messages with Emacs
- PO mode.
-
- * server/po/banner.pot:
- * server/po/footer-text.pot:
- * server/po/banner.bg.po:
- * server/po/banner.fr.po:
- * server/po/footer-text.bg.po:
- * server/po/footer-text.fr.po:
- * server/banner.bg.html:
- * server/banner.fr.html: Regenerate forcefully with `make -B
- <target>' to enforce the usage of the xhtml module.
-
-2007-12-12 Kaloian Doganov <address@hidden>
-
- * prep/i18n/GNUmakefile ($(template_dir)/po/%.pot): Po4a backend
- switch from html to xhtml.
- (template_rules): Likewise.
- (PO4A_HTMLFLAGS): Deleted, since html backend is not used anymore.
-
-2007-12-10 Yavor Doganov <address@hidden>
-
- * prep/i18n/GNUmakefile:
- * prep/i18n/i18n.mk:
- * prep/i18n/make-prototype.scm:
- * prep/i18n/make-prototype-home.scm: Add license notices.
-
-2007-12-09 Yavor Doganov <address@hidden>
-
- First real-life simulation of the build system, commit as a
- separate revision so that everyone can reproduce the make process
- with the VCS.
- * po/home.pot:
- * po/home.bg.po:
- * po/home.pl.po:
- * po/home.zh-cn.po:
- * home.bg.shtml:
- * home.pl.shtml:
- * home.zh-cn.shtml:
- * server/po/banner.pot:
- * server/po/banner.bg.po:
- * server/po/banner.fr.po:
- * server/banner.bg.html:
- * server/banner.fr.html:
- * server/po/footer-text.pot:
- * server/po/footer-text.bg.po:
- * server/po/footer-text.fr.po:
- * server/footer-text.bg.html:
- * server/footer-text.fr.html: Regenerated by simply running
- `make -C prep/i18n'.
-
-2007-12-09 Yavor Doganov <address@hidden>
-
- Update to the new style.
- * prep/i18n/GNUmakefile (template_files): Remove
- sidebar-fsf-support, sidebar-top-half and sidebar-stay; all
- obsolete now.
- * home.shtml:
- * server/banner.html:
- * server/footer-text.html: Update from the `www' master repo.
- * server/sidebar-fsf-support.html:
- * server/footer-text.html:
- * server/sidebar-top-half.html:
- * server/sidebar-bottom-half.html:
- * server/sidebar-stay.html:
- * server/po/sidebar-fsf-support.fr.po:
- * server/po/sidebar-top-half.pot:
- * server/po/sidebar-bottom-half.pot:
- * server/po/sidebar-top-half.bg.po:
- * server/po/sidebar-bottom-half.bg.po:
- * server/po/sidebar-stay.pot:
- * server/po/sidebar-stay.bg.po:
- * server/po/sidebar-fsf-support.pot:
- * server/po/sidebar-fsf-support.bg.po:
- * server/po/sidebar-top-half.fr.po:
- * server/po/sidebar-bottom-half.fr.po:
- * server/po/sidebar-stay.fr.po: Delete; not needed anymore.
-
-2007-12-08 Yavor Doganov <address@hidden>
-
- * home.bg.shtml:
- * home.pl.shtml:
- * home.zh-cn.shtml:
- * prep/i18n/generic.pl.html:
- * server/banner.fr.html:
- * server/footer-text.bg.html:
- * server/footer-text.fr.html: Add these generated files to provoke
- full simulation.
-
-2007-12-07 Yavor Doganov <address@hidden>
-
- Fix the Polish gnusflashes unpleasant situation.
- * prep/i18n/GNUmakefile ($(rootdir)/home.$(1).shtml): Use an
- `ifeq' conditional that tests if the value of h_lang is `pl' and
- executes a simplified command. Document the reason.
- * prep/i18n/i18n.mk (HOME_LINGUAS): Add pl.
- * po/home.pl.po: New untranslated file to test the proper
- generation of the Polish homepage.
-
-2007-12-07 Kaloian Doganov <address@hidden>
-
- * prep/i18n/GNUmakefile ($(rootdir)/po/home.proto)
- ($(1).proto $(1).translinks): Fixed a bug that caused make to stop
- regardless of the exit status of the Scheme script.
-
-2007-12-06 Yavor Doganov <address@hidden>
-
- * prep/i18n/GNUmakefile ($(rootdir)/po/home.proto)
- ($(1).proto $(1).translinks): If the .proto and .translinks
- generation fails (usually due to a validation bug in the source
- article or bug in the Scheme script itself), exit with a non-zero
- status right after deleting the targets, so that make stops
- exactly on these commands.
-
-2007-12-05 Yavor Doganov <address@hidden>
-
- * keepingup.html: Updated from `www' with bugfixes.
- * po/keepingup.pot: Generated.
-
- * keepingup.html:
- * provide.html:
- * gnu/gnu.html:
- * gnu/rms-lisp.html:
- * philosophy/bdk.html:
- * philosophy/eldred-amicus.html: Imported new articles from the
- central `www' repository to test the new rules.
- * po/provide.pot:
- * gnu/po/gnu.pot:
- * gnu/po/rms-lisp.pot:
- * philosophy/po/bdk.pot:
- * philosophy/po/eldred-amicus.pot: Generated.
- * po/home.pot:
- * po/home.zh-cn.po:
- * philosophy/po/schools.pot: Updated.
-
-2007-09-08 Yavor Doganov <address@hidden>
-
- * prep/i18n/GNUmakefile (article_rules) [generic.$(2).html]: Move
- into its own template `generic_rules' and rename it to
- `generic.$(1).html'. This is necessary because there might be
- only home.cs.po without any other article translated in Czech. The
- home rule would fail in that case.
-
-2007-09-07 Yavor Doganov <address@hidden>
-
- * prep/i18n/GNUmakefile (article_rules) [generic.$(2).html]: New
- target.
- ($(subst /po/,/,$(1).html)): Depend on it, so if the team changes
- the description, all articles under make's control to be updated.
- Remove the command that checks for the presence and touches the
- file.
-
- * prep/i18n/GNUmakefile: Housekeeping. Delete the redundant
- `targets' from all comments.
-
- * prep/i18n/GNUmakefile (rootdir, replaceable_includes): Define as
- simply expanded.
-
- * prep/i18n/i18n.mk: Mark all variables as simply expanded.
-
- * prep/i18n/GNUmakefile (home.proto, article_pot_rules)
- [$(1).proto $(1).translinks]: If $(MAKE_PROTOTYPE_HOME) and
- $(MAKE_PROTOTYPE) exit with a non-zero code, remove the possibly
- erroneously generated files in order targets not to be considered
- up-to-date on the next make's run. This prevents breaking the
- translations badly further in the chain. The Scheme backtrace
- should be sufficient to figure out what's going on.
-
-2007-09-05 Yavor Doganov <address@hidden>
-
- Initial implementation of the generalization of the generic
- articles' translations and PO/POT manipulation.
- * prep/i18n/i18n.mk (ROOT, gnu, philosophy, ALL_DIRS): New
- variables.
- * prep/i18n/GNUmakefile (articles, articles_pot, root_articles)
- (root_articles_pot, ALL_POTS, ALL_BASE, find_po, ALL_POS)
- (ALL_POS_BASE, articles_translated): New variables.
- (all): Depend on $(ALL_POTS) and $(articles_translated), remove
- schools.bg.html.
- (article_pot_rules, article_rules): New `define'd template rules,
- replacing entirely all schools's rules.
-
-2007-08-19 Kaloian Doganov <address@hidden>
-
- * po/home.bg.po: Partly translated according to Yavor Doganov's
- <address@hidden> translation.
-
-2007-08-19 Yavor Doganov <address@hidden>
-
- * po/home.bg.po: Filled encoding in `Content-Type' and
- `Content-Transfer-Encoding' headers.
- * po/home.zh-cn.po: Added a dummy file to let `make' exit w/o
- errors.
- * server/po/sidebar-fsf-support.fr.po: Likewise.
- * server/po/banner.fr.po: Likewise.
- * server/po/footer-text.fr.po: Likewise.
- * server/po/sidebar-top-half.fr.po: Likewise.
- * server/po/sidebar-bottom-half.fr.po: Likewise.
- * server/po/sidebar-stay.fr.po: Likewise.
-
-2007-08-19 Kaloian Doganov <address@hidden>
-
- * philosophy/schools.pot: Updated using latest po4a toolkit with
- xhtml backend.
- * philosophy/schools.bg.po: Likewise.
- * philosophy/schools.bg.html: Regenerated using latest po4a
- toolkit and schools.bg.po.
-
- * prep/i18n/GNUmakefile (../../philosophy/po/schools.proto): fixed
- a typo in prerequisites.
-
- * prep/i18n/GNUmakefile ($(rootdir)/po/home.proto)
- ($(rootdir)/home.$(1).shtml, ../../philosophy/po/schools.proto)
- (../../philosophy/schools.bg.html): A new special tag
- <gnu.org-i18n> is used to denote non-translatable strings (instead
- of HTML comments).
- * prep/i18n/make-prototype-home.scm: <gnu.org-i18n> used to escape
- non-translatable strings.
- * prep/i18n/make-prototype.scm: Likewise.
-
-2007-08-12 Yavor Doganov <address@hidden>
-
- * prep/i18n/GNUmakefile (home.$(1).shtml): Fixed escaping problems
- in the sed expressions as a result of the `eval' function.
-
- * prep/i18n/GNUmakefile (home.$(1).shtml): Added a comment about
- another escape error.
-
- * prep/i18n/GNUmakefile: Fixed a typo (replacable -> replaceable);
- all uses changed. Added a note about a bug in the home.$(1).shtml
- target.
- (home.$(1).shtml): Added a sed expression to replace
- gnusflashes.include with the translated one.
-
- * prep/i18n/GNUmakefile (template_dir): Compute it based on
- $(rootdir).
- (home.proto): Deleted comments for bugginess, not relevant any
- more.
-
-2007-08-12 Kaloian Doganov <address@hidden>
-
- * prep/i18n/GNUmakefile (PO4A_XHTMLFLAGS): Updated for
- compatibility with po4a from the latest CVS HEAD.
-
- * prep/i18n/GNUmakefile ($(rootdir)/po/home.proto): Removed
- language code from "generic.html".
- ($(rootdir)/home.$(1).shtml): Added command to replace
- "generic.html" with "generic.LANG.html".
- (../../philosophy/po/schools.proto): Removed language code from
- "generic.html".
- (../../philosophy/schools.bg.html): Added command to replace
- "generic.html" with "generic.LANG.html".
-
- * po/home.pot: Added.
- * po/home.bg.po: Added.
- * prep/i18n/make-prototype-home.scm: Added. Variant of
- make-prototype.scm to handle the special case of home.shtml.
- * prep/i18n/GNUmakefile (MAKE-PROTOTYPE-HOME): New variable for
- calling make-prototype-home.scm.
- ($(rootdir)/po/home.proto): Call to MAKE-PROTOTYPE-HOME instead of
- MAKE-PROTOTYPE. Unescape special characters since this rule is no
- longer evaluated with `eval'.
- ($(rootdir)/home.$(1).shtml): Fixed typo in call to PO4A-TRANSLATE.
-
- * prep/i18n/make-prototype.scm: Variable temp-filename renamed to
- proto-filename in order to reflect the current terminology.
-
-2007-08-11 Kaloian Doganov <address@hidden>
-
- * prep/i18n/GNUmakefile (../../philosophy/schools.bg.html): As
- articles are treated as XHTML, po4a-translate must be invoked with
- xhtml flags, not html ones.
-
- * prep/i18n/GNUmakefile (PO4A_XHTMLFLAGS): Fixed bug in parser
- options.
-
- * prep/i18n/GNUmakefile (PO4A-GETTEXTIZE, PO4A-TRANSLATE): Program
- flags are moved in two groups of variables grouped by tool and by
- format.
- (PO4A-GETTEXTIZEFLAGS): Flags for po4a-gettextize.
- (PO4A-TRANSLATEFLAGS): Flags for po4a-translate.
- (PO4A_HTMLFLAGS): Flags to select HTML format.
- (PO4A_XHTMLFLAGS): Flags to select XHTML format. All callers
- changed.
-
- * prep/i18n/GNUmakefile ($(rootdir)/po/home.proto): Taken out from
- home_rules, since there is no need to regenerate this rule for
- every language.
-
-2007-08-11 Yavor Doganov <address@hidden>
-
- Preliminary support for the homepages.
- * home.shtml: Added.
- * prep/i18n/generic.zh-cn.html: Likewise.
- * prep/i18n/i18n.mk (HOME_LINGUAS): New variable.
- * prep/i18n/GNUmakefile (rootdir): New global variable.
- (home_lang, home_translated): New variables.
- (all): Depend on home_translated.
- ($(rootdir)/po/home.pot): New target.
- ($(rootdir)/po/home.proto, $(rootdir)/po/home.$(1).po)
- ($(rootdir)/home.$(1).shtml): New targets, encapsulated in `define
- home_rules'.
-
-2007-08-11 Kaloian Doganov <address@hidden>
-
- * prep/i18n/GNUmakefile (template_translated_base)
- (template_translated): Defined as simply expanded variables for
- performance and error-proofing reasons.
-
-2007-08-10 Kaloian Doganov <address@hidden>
-
- * prep/i18n/GNUmakefile: Cleaner way to calculate
- template_translated.
-
-2007-08-10 Yavor Doganov <address@hidden>
-
- * prep/i18n/Makefile: Renamed to...
- * prep/i18n/GNUmakefile: ...since we use a lot of GNU extensions.
-
-2007-08-09 Kaloian Doganov <address@hidden>
-
- * prep/i18n/Makefile:
- * prep/i18n/make-prototype.scm:
- * prep/i18n/make-template.scm: ÐÑеименÑван на
make-prototype.scm
- за да Ñе избегне пÑипокÑиванеÑо Ñ Ð²ÐµÑе
ÑÑÑеÑÑÑваÑаÑа ÑпоÑÑеба на
- ÑеÑмина `template'.
-
-2007-08-09 Yavor Doganov <address@hidden>
-
- * prep/i18n/i18n.mk: New file.
- * prep/i18n/Makefile: Include i18n.mk.
- (template_translated_base): New variable.
- (template_translated): Make it appendable and encapsulate it in
- `define'; call a special pattern function for substitution of
- $(TEMPLATE_LINGUAS).
- (template_rules): Likewise, pattern rules invoked by `eval' and
- 'call'.
-
-2007-08-08 Yavor Doganov <address@hidden>
-
- * prep/i18n/Makefile (RM): Do not define it as it is `rm -f' by
- default. Adjusted all variables, targets, rules and commands to
- the new path.
-
- * Makefile:
- * make-template.scm: Moved to www/prep/i18n to mimic the official
- repo's layout.
-
-2007-08-07 Kaloian Doganov <address@hidden>
-
- * Makefile:
- * prep/i18n/generic.bg.html:
- * standards/translation-generic.bg.html: ÐÑемеÑÑен и
пÑеименÑван
- каÑо www/standards/generic.bg.html.
-
- * prep/i18n: СÑздадена диÑекÑоÑÐ¸Ñ Ð·Ð° ÑÑÑ
ÑанÑване на ÑайловеÑе Ñ
- обÑа инÑоÑмаÑÐ¸Ñ Ð·Ð° екипиÑе/пÑоекÑиÑе
за пÑевод.
-
-2007-08-05 Yavor Doganov <address@hidden>
-
- ÐÑÑва ÑÑÑпка пÑи генеÑализаÑаиÑÑа на
ÑаблониÑе в /server.
- * Makefile (template_dir, template_files, template_pot)
- (template_translated): Ðови пÑоменливи.
- (all): ÐамÑна на banner.bg.html Ñ $(template_translated).
- (.PRECIOUS): Ðова ÑпеÑиална Ñел.
- (banner.bg.pot): ЦелÑа пÑемеÑÑена...
- ($(template_dir)/po/%.pot): ...ÑÑк.
- (banner.bg.po): ÐÑемеÑÑена...
- ($(template_dir)/po/%.bg.po): ...ÑÑк.
- (banner.bg.html): ÐÑемеÑÑена...
- ($(template_dir)/%.bg.html): ...ÑÑк.
- Ðзползване на авÑомаÑиÑни пÑоменливи,
кÑдеÑо е вÑзможно.
- * server/sidebar-fsf-support.html:
- * server/footer-text.html:
- * server/sidebar-top-half.html:
- * server/sidebar-bottom-half.html:
- * server/sidebar-stay.html: ÐопиÑани оÑ
оÑиÑиалноÑо Ñ
ÑанилиÑе
- `www'.
- * server/po/sidebar-fsf-support.pot:
- * server/po/footer-text.pot:
- * server/po/sidebar-top-half.pot:
- * server/po/sidebar-bottom-half.pot:
- * server/po/sidebar-stay.pot:
- * server/po/sidebar-fsf-support.bg.po:
- * server/po/footer-text.bg.po:
- * server/po/sidebar-top-half.bg.po:
- * server/po/sidebar-bottom-half.bg.po:
- * server/po/sidebar-stay.bg.po: ÐенеÑиÑани и
добавени (заÑега без
- пÑевод).
-
-2007-08-05 Kaloian Doganov <address@hidden>
-
- * server/banner.bg.html:
- * server/po/banner.bg.po:
- * server/po/banner.pot: ÐÑевод на banner.bg.po
-
- * server/banner.html: ÐÑемаÑ
Ð½Ð°Ñ Ð¿Ð°ÑазиÑен низ,
оÑÑавен Ð¾Ñ Ð¿Ð¾-Ñанни
- ÑеÑÑове.
-
- * Makefile:
- * server/banner.bg.html:
- * server/banner.html:
- * server/po/banner.bg.po:
- * server/po/banner.pot: ÐнÑÑаÑÑÑÑкÑÑÑа за
инÑеÑнаÑионализаÑÐ¸Ñ Ð½Ð°
- www/server/banner.html.
-
-2007-08-03 Kaloian Doganov <address@hidden>
-
- * cut-translations.scm:
- * philosophy/po/schools.bg.po:
- * philosophy/po/schools.pot: РазмеÑÑване меÑÑаÑа на
бележкиÑе под
- Ð»Ð¸Ð½Ð¸Ñ Ð¸ заÑлÑгиÑе.
-
- * philosophy/po/schools.bg.po: ÐейÑÑвиÑелно
подаване на пÑомениÑе,
- опиÑани в пÑедноÑо ÑÑобÑение.
-
- * cut-translations (main): РегÑлÑÑниÑÑ Ð¸Ð·Ñаз,
използван за
- ÑÑпоÑÑавÑне на HTML-ÑÑаниÑиÑе, е изнеÑен
в оÑделна пÑоменлива
- page-regexp. ÐмÑÐºÐ½Ð°Ñ Ð¿Ð°ÑамеÑÑÑ Ð½Ð° вÑоÑа
позиÑÐ¸Ñ -- име на Ñайла Ñ
- обÑа инÑоÑмаÑÐ¸Ñ Ð·Ð° пÑевода. ÐоÑÑавÑне
на slot-ове за бележки на
- пÑеводаÑа, заÑлÑги на пÑеводаÑа и обÑа
инÑоÑмаÑÐ¸Ñ Ð·Ð° пÑевода.
- * schools.pot: Ðобавени Ñа ÑлÑжебни низове за
бележки на пÑеводаÑа
- и заÑлÑги.
- * schools.bg.po: ÐÑеведени Ñа новиÑе ÑлÑжебни
низове бележки на
- пÑеводаÑа и заÑлÑги.
- * translation-generic.bg.html: ÐбÑа инÑоÑмаÑÐ¸Ñ Ð·Ð°
пÑеводиÑе на
- бÑлгаÑÑки език.
- * Makefile (www/philosophy/schools.bg.html): ÐавиÑимоÑÑ ÐºÑм
- www/standards/translation-generic.bg.html.
-
-2007-08-01 Kaloian Doganov <address@hidden>
-
- * philosophy/po/schools.bg.po:
- * philosophy/po/schools.pot:
- * Makefile (www/philosophy/po/schools.temp)
- (www/philosophy/schools.bg.html): ÐизÑÑ $Date.*$ вÑеменно
Ñе
- загÑажда Ñ ÐºÐ¾Ð¼ÐµÐ½ÑаÑ, Ñака Ñе да не
влиза в ÑÑдÑÑжаниеÑо на
- генеÑиÑÐ°Ð½Ð¸Ñ POT-Ñайл.
-
-2007-07-31 Yavor Doganov <address@hidden>
-
- * standards: ÐобавÑне на допÑлниÑелна
диÑекÑоÑиÑ, коÑÑо да емÑлиÑа
- /server/standards/translations (мÑÑÑоÑо, кÑдеÑо Ñе Ñе
ÑÑдÑÑжа Ñайл
- Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð·Ð° ÑÑоÑвеÑÐ½Ð¸Ñ ÐµÐºÐ¸Ð¿.)
-
-2007-07-31 Kaloian Doganov <address@hidden>
-
- * philosophy/po/schools.bg.po:
- * philosophy/po/schools.pot: СпиÑÑкÑÑ Ñ ÐµÐ·Ð¸ÑиÑе
веÑе не ÑаÑÑ Ð¾Ñ
- .po и .pot-ÑайловеÑе.
-
- * philosophy/po/schools.bg.po:
- * philosophy/schools.bg.html: ÐÑеведени Ñа вÑиÑки
абзаÑи оÑ
- schools.
-
- * philosophy/po/schools.bg.po:
- * philosophy/po/schools.pot:
- * philosophy/schools.bg.html: ЧаÑÑиÑен пÑевод на
schools.
-
- * gnu.org-i18n/po4a:
- * Makefile: СÑздаване на клон po4a Ð¾Ñ translate.
-
- * Makefile: ÐоÑегаÑнаÑа ÑазÑабоÑка е
пÑемеÑÑена в клона translate.
-
-2007-07-30 Kaloian Doganov <address@hidden>
-
- * Makefile:
- * philosophy/schools.bg.html: ÐенеÑиÑан schools.bg.html и
- деÑиниÑии в Makefile за генеÑиÑанеÑо мÑ.
-
- * philosophy/po/schools.bg.po: ÐÑÑвонаÑален "пÑевод"
на
- schools.bg.po.
-
- * Makefile:
- * philosophy/po/schools.bg.po:
- * philosophy/po/schools.pot: schools.pot, schools.bg.po и Makefile
- за генеÑиÑанеÑо им.
-
- * philosophy/po: po-диÑекÑоÑÐ¸Ñ Ð·Ð° пÑеводиÑе на
philosophy.
-
- * philosophy/schools.bg.html:
- * philosophy/schools.html: philosophy/schools.html на
английÑки и
- бÑлгаÑÑки.
-
- Copyright (C) 2007, 2008 Free Software Foundation, Inc.
-
- This file is part of GNUnited Nations.
-
- GNUnited Nations is free software: you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
-
- GNUnited Nations is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNUnited Nations. If not, see <http://www.gnu.org/licenses/>.
Index: prep/gnun/GNUmakefile
===================================================================
RCS file: prep/gnun/GNUmakefile
diff -N prep/gnun/GNUmakefile
--- prep/gnun/GNUmakefile 18 Feb 2008 06:56:21 -0000 1.40
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,315 +0,0 @@
-# Copyright (C) 2007, 2008 Free Software Foundation, Inc.
-
-# This file is part of GNUnited Nations.
-
-# GNUnited Nations is free software: you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-
-# GNUnited Nations is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with GNUnited Nations. If not, see <http://www.gnu.org/licenses/>.
-
-MSGMERGE = msgmerge
-MSGFMT = msgfmt
-PO4A-GETTEXTIZE = po4a-gettextize
-PO4A-TRANSLATE = po4a-translate
-MAKE-PROTOTYPE = ./make-prototype
-VALIDATE-HTML = ./validate-html
-SED = sed
-M4 = m4
-
-PO4A-GETTEXTIZEFLAGS =
-PO4A-TRANSLATEFLAGS = --keep=0
-
-PO4A_XHTMLFLAGS = --format=xhtml -o ontagerror=silent -o "tags=<gnun>"
-
-# This variable exists only for the purpose of defining it to a
-# non-standard executable while testing future cvs releases. The
-# rules already depend on cvs-specific options.
-CVS := cvs
-
-# Do not `cvs add' any files by default unless VCS=yes.
-ifneq (,$(findstring yes,$(VCS)))
-CVSSKIP :=
-else
-CVSSKIP := echo "SKIP:"
-endif
-
-# Do not validate any files by default unless VALIDATE=yes.
-ifneq (,$(findstring yes,$(VALIDATE)))
-VALIDATESKIP :=
-else
-VALIDATESKIP := echo "SKIP:"
-endif
-
-# Email addresses for notifications.
-devel_addr := address@hidden
-
-rootdir := ../..
-
-# FIXME: footer-short and footer-min are remnants from the old-new
-# design; they should go at some point.
-replaceable_includes := header banner footer footer-short footer-min
-
-include gnun.mk
-
-### Special variables for the `www' master templates ###
-template_dir := $(rootdir)/server
-template_files := banner \
- footer-text
-template_translated_base := $(addprefix $(template_dir)/,$(template_files))
-template_lang = $(addsuffix .$(1).html,$(template_translated_base))
-template_translated := $(foreach t_lang,$(TEMPLATE_LINGUAS),$(call
template_lang,$(t_lang)))
-$(info template_translated = $(template_translated)) # for debugging purposes
-### End of variables declaration (templates) ###
-
-### Special variables for the home pages ###
-home_lang = $(rootdir)/home.$(1).shtml
-home_translated := $(foreach h_lang,$(HOME_LINGUAS),$(call
home_lang,$(h_lang)))
-$(info home_translated = $(home_translated)) # for debugging purposes
-### End of variables declaration (homepages) ###
-
-### Special variables for all other articles ###
-# FIXME: Variables' computatation could be optimized, but in any event
-# it is much better if translators do not have to add manually anything.
-articles := $(foreach dir,$(ALL_DIRS),$(addprefix $(dir)/po/,$(value $(dir))))
-articles_pot := $(addprefix $(rootdir)/,$(articles:%=%.pot))
-root_articles := $(foreach root_article,$(ROOT),$(addprefix
$(rootdir)/po/,$(root_article)))
-root_articles_pot := $(root_articles:%=%.pot)
-ALL_POTS := $(articles_pot) $(root_articles_pot)
-ALL_BASE := $(ALL_POTS:%.pot=%)
-find_po = $(wildcard $(1).*.po)
-ALL_POS := $(foreach pot,$(ALL_POTS),$(call find_po,$(basename $(pot))))
-ALL_POS_BASE := $(ALL_POS:%.po=%)
-articles_translated := $(subst /po/,/,$(ALL_POS:%.po=%.html))
-$(info ALL_POTS = $(ALL_POTS)) # for debugging purposes
-$(info articles_translated = $(articles_translated)) # for debugging purposes
-### End of variables declaration (all articles) ###
-
-.PHONY: all vcs-add-always
-all: $(template_translated) $(home_translated) $(ALL_POTS) \
- $(articles_translated) vcs-add-always
-
-# The command to add a file to the repository.
-define addfile
-[ -f $@ ] || (touch $@ ; $(CVSSKIP) $(CVS) add $@)
-endef
-
-# The command to generate pot file which perform additional checks
-# whether the changes are not trivial (regarding only
-# POT-Creation-Date), in which case the changes are ignored.
-define generate-pot
address@hidden Generating POT...
-$(PO4A-GETTEXTIZE) $(PO4A_XHTMLFLAGS) $(PO4A-GETTEXTIZEFLAGS) \
- --master $< --po address@hidden
-if ([ ! -f $@ ] || [ "`diff -U 0 $@ address@hidden | grep -v
"^\(---\|+++\|@@\)" \
- | grep -v '^[-+]\"POT-Creation-Date:' | wc -c`" -ne 0 ]); then \
- mv address@hidden $@ ; \
-fi;
-touch $@
-$(RM) address@hidden
-endef
-
-# The command to check the validity of a PO file.
-define check-po
-$(VALIDATESKIP) $(MSGFMT) --check --verbose --output-file=/dev/null $$@
-endef
-
-# Ensure that generic.LANG.html is always present for the homepage and
-# articles' generation.
-
-define generic-var
-GENERIC_LINGUAS += $(1)
-endef
-
-define generic_rules
-generic.$(1).html:
- $$(addfile)
-endef
-
-$(foreach h_lang,$(HOME_LINGUAS),$(eval $(call generic-var,$(h_lang))))
-$(foreach po_base,$(ALL_POS_BASE), \
- $(eval $(call generic-var,$(subst .,,$(suffix $(po_base))))))
-$(foreach g_lang,$(sort $(GENERIC_LINGUAS)), \
- $(eval $(call generic_rules,$(g_lang))))
-
-### Specific rules for the templates ###
-.PRECIOUS: $(template_dir)/po/%.pot
-$(template_dir)/po/%.pot: $(template_dir)/%.html
- $(addfile)
- $(generate-pot)
-
-define template_rules
-.PRECIOUS: $(template_dir)/po/%.$(1).po
-$(template_dir)/po/%.$(1).po: $(template_dir)/po/%.pot
-# If the POT is new, it is natural that teams cannot translate it at
-# once. Create a copy for every PO file in TEMPLATE_LINGUAS so that
-# the build can continue without errors.
-# FIXME: Check if this approach works with gettext >> 0.14.
- [ -f $$@ ] || (cp $$< $$@ ; $(CVSSKIP) $(CVS) add $$@)
-# Since we handle the case when new templates are added by webmasters,
-# it is OK to ignore errors from these, at least until fencepost has
-# an old version of gettext. The XHTML validation errors should be
-# clear even if the bug is in the server templates translations.
- -$(check-po)
- @echo Updating PO file...
- $(MSGMERGE) --update $$@ $$< && touch $$@
-
-$(template_dir)/%.$(1).html: $(template_dir)/%.html
$(template_dir)/po/%.$(1).po
- $$(addfile)
- @echo Generating the translated article...
- $(PO4A-TRANSLATE) $(PO4A_XHTMLFLAGS) $(PO4A-TRANSLATEFLAGS) --master
$$< --po \
- $(template_dir)/po/$$(*F).$(1).po --localized $$@
- $(SED) --in-place ':egin;N;$$$$!begin;s/\([ \t]*\n[
\t]*\)\{3,\}<!--/\n\n<!--/g' $$@
-endef
-
-$(foreach t_lang,$(TEMPLATE_LINGUAS),$(eval $(call template_rules,$(t_lang))))
-### End of the templates-specific rules ###
-
-### Specific rules for the homepages ###
-$(rootdir)/po/home.proto: $(rootdir)/home.shtml
-# Delete the target if the script exits with a non-zero status
-# in order to prevent further messing up in the chain. For
-# extra safety, exit with an error so that make does not
-# proceed to the next command.
- $(VALIDATESKIP) $(VALIDATE-HTML) $<
- $(MAKE-PROTOTYPE) --home --input=$< --generic=generic.html --output=$@
|| ($(RM) $@ ; exit 1)
- $(SED) --in-place "s/\$$Date.*\$$/<gnun>\0<\/gnun>/g" $@
-
-$(rootdir)/po/home.pot: $(rootdir)/po/home.proto
- $(addfile)
- $(generate-pot)
-
-define home_rules
-$(rootdir)/po/home.$(1).po: $(rootdir)/po/home.pot
-# This is temporary for `trans-coord'; errors should not be ignored
-# when GNUN runs in the official repository.
- -$(check-po)
- $(MSGMERGE) --update $$@ $$<
- touch $$@
-
-$(rootdir)/home.$(1).shtml: $(rootdir)/po/home.proto
$(rootdir)/po/home.$(1).po generic.$(1).html
- $$(addfile)
- $(PO4A-TRANSLATE) $(PO4A_XHTMLFLAGS) $(PO4A-TRANSLATEFLAGS) --master
$$< --po $(rootdir)/po/home.$(1).po --localized $(rootdir)/po/home.$(1).m4
- $(SED) --in-place
"s/\(<gnun>include(\`.*\)\([.]html')<\/gnun>\)/\1.$(1)\2/g"
$(rootdir)/po/home.$(1).m4
- $(SED) --in-place "s/<gnun>\(.*\)<\/gnun>/\1/g"
$(rootdir)/po/home.$(1).m4
- $(SED) --in-place ':egin;N;$$$$!begin;s/\([ \t]*\n[
\t]*\)\{3,\}<!--/\n\n<!--/g' $(rootdir)/po/home.$(1).m4
- for replaceable in $(replaceable_includes); do \
- $(SED) --in-place "s/\(<!--#include
virtual=\".*$$$$replaceable\)\(.html\" -->\)/\1.$(1)\2/g"
$(rootdir)/po/home.$(1).m4; \
- done;
-# Polish is special case, because Apache treats gnusflashes.pl.include
-# as a Perl file. This is hopefuly a temprorary situation.
-ifeq ($(1), pl)
- $(SED) --in-place "s/\(<!--#include file=\"gnusflashes*\)\(.include\"
-->\)/\1.polish\2/g" $(rootdir)/po/home.pl.m4
-else
- [ ! -f $(rootdir)/gnusflashes.$(1).include ] || $(SED) --in-place
"s/\(<!--#include file=\"gnusflashes*\)\(.include\" -->\)/\1.$(1)\2/g"
$(rootdir)/po/home.$(1).m4
-endif
- $(M4) $(rootdir)/po/home.$(1).m4 > $$@
-# To validate Catalan translations, add `ca' after `bg' and update the
-# variable `verbatim-templates' accordingly.
-# FIXME: Remove this conditional when GNUN operates in `www', where we
-# want to validate everything.
-ifneq (,$(findstring $(1),bg))
- $(VALIDATESKIP) $(VALIDATE-HTML) $$@
-endif
-endef
-
-$(foreach h_lang,$(HOME_LINGUAS),$(eval $(call home_rules,$(h_lang))))
-### End of the homepages-specific rules ###
-
-### Rules for all other articles ###
-define article_pot_rules
-$(1).proto $(1).translinks: $(subst /po/,/,$(1).html)
- $(VALIDATESKIP) $(VALIDATE-HTML) $$<
- $(MAKE-PROTOTYPE) --input=$$< --generic=generic.html
--output=$(1).proto --translinks=$(1).translinks || \
- ($(RM) $(1).proto $(1).translinks ; exit 1)
- $(SED) --in-place "s/\$$$$Date.*\$$$$/<gnun>\0<\/gnun>/g" $(1).proto
-
-$(1).pot: $(1).proto
- $$(addfile)
- $$(generate-pot)
-endef
-
-define article_rules
-$(1).po: $(basename $(1)).pot
- $(check-po)
- $(MSGMERGE) --update $$@ $$<
- touch $$@
-
-$(subst /po/,/,$(1).html): $(basename $(1)).proto $(basename $(1)).translinks
$(1).po generic.$(2).html
- $$(addfile)
- $(PO4A-TRANSLATE) $(PO4A_XHTMLFLAGS) $(PO4A-TRANSLATEFLAGS) --master
$$< --po $(1).po --localized $(1).m4
- $(SED) --in-place
"s/\(<gnun>include(\`.*\)\([.]html')<\/gnun>\)/\1.$(2)\2/g" $(1).m4
- $(SED) --in-place "s/<gnun>\(.*\)<\/gnun>/\1/g" $(1).m4
- $(SED) --in-place ':egin;N;$$$$!begin;s/\([ \t]*\n[
\t]*\)\{3,\}<!--/\n\n<!--/g' $(1).m4
- for replaceable in $(replaceable_includes); do \
- $(SED) --in-place "s/\(<!--#include
virtual=\".*$$$$replaceable\)\(.html\" -->\)/\1.$(2)\2/g" $(1).m4; \
- done;
- $(M4) $(1).m4 > $$@
- $(VALIDATESKIP) $(VALIDATE-HTML) $$@
-endef
-
-$(foreach base,$(ALL_BASE),$(eval $(call article_pot_rules,$(base))))
-# FIXME: This is close to hell. There should be an easier way to do it.
-$(foreach po_base,$(ALL_POS_BASE),$(eval $(call
article_rules,$(po_base),$(subst .,,$(suffix $(po_base))))))
-### End of all articles' rules ###
-
-# If VCS=always, add all necessary files. The templates' POT are not
-# handled for the moment, but they are more or less stable. Also,
-# there is no sense in adding home.pot as this should happen only once.
-# WARNING: This is horribly slow and is implemented just in case.
-ifneq (,$(findstring always,$(VCS)))
-vcs-add-always:
- for file in $(template_translated) $(home_translated) $(ALL_POTS) \
- $(articles_translated) $(wildcard generic.*.html); do \
- ($(CVS) add $$file ; exit 0) ; done
-else
-vcs-add-always: ;
-endif
-
-# Special target to sync the original English articles from the `www'
-# repository. It is intended to be invoked by a fencepost cron job
-# and will be useful even when GNUN is deployed. Automatic adding and
-# removal is not implemented (except adding `verbatim-templates'), so
-# make sure to `cvs add'/`cvs remove' and commit the article when
-# editing gnun.mk.
-wwwdir := $(rootdir)/$(rootdir)/www
-orig-templates := $(addsuffix .html,$(template_translated_base))
-orig-articles := $(addsuffix .html,$(subst /po/,/,$(ALL_BASE)))
-files-to-sync := $(rootdir)/home.shtml $(orig-templates) $(orig-articles)
-abs-files-to-sync := $(subst $(rootdir)/,,$(files-to-sync))
-# Templates that are not gettextized, but are necessary to reside in
-# trans-coord for HTML validation at build time.
-verbatim-templates := $(addprefix server/,header.html footer.html \
- header.af.html footer.af.html \
- header.bg.html footer.bg.html)
-
-.PHONY: sync
-sync:
-# Synchronize all articles and report if an article has been deleted
-# from the master repository.
- for file in $(abs-files-to-sync) ; do \
- if [ ! -f $(wwwdir)/$$file ] ; then \
- echo "Warning: $$file missing in www; update the variable?" \
- | $(CVSSKIP) mail -s "sync: missing file" $(devel_addr) ; \
- else \
- cp -p --update $(wwwdir)/$$file $(rootdir)/$$file ; \
- fi ; done
-# Copy all necessary templates that are not under GNUN's control and
-# `cvs add' them if VCS=yes.
- for t in $(verbatim-templates) ; do \
- if [ ! -f $(rootdir)/$$t ] ; then \
- cp -p $(wwwdir)/$$t $(rootdir)/$$t \
- && $(CVSSKIP) $(CVS) add $(rootdir)/$$t ; \
- else \
- cp -p --update $(wwwdir)/$$t $(rootdir)/$$t ; \
- fi ; done
- cd $(rootdir) ; \
- $(CVSSKIP) $(CVS) commit -m \
- "Automatic sync from the master www repository."
Index: prep/gnun/README
===================================================================
RCS file: prep/gnun/README
diff -N prep/gnun/README
--- prep/gnun/README 15 Feb 2008 19:39:31 -0000 1.7
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,11 +0,0 @@
-Dependencies
-------------
-GNU Make >= 3.81 (prereleases of 3.81 also work)
-GNU Sed
-GNU Gettext (>= 0.16 ?)
-GNU M4 >= 1.4
-GNU Guile >= 1.6
-po4a 0.32
-Libxml2 (>= 2.6.24, needed for XHTML validation only)
-W3C XHMTL 1.0 DTDs (needed for XHTML validation only)
-CVS (>= 1.12.9, needed if VCS operations are enabled)
Index: prep/gnun/TODO
===================================================================
RCS file: prep/gnun/TODO
diff -N prep/gnun/TODO
--- prep/gnun/TODO 13 Feb 2008 20:44:35 -0000 1.15
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,110 +0,0 @@
-GNUnited Nations TODO List -*-outline-*-
-
-* Present bugs
-
-** Po4a wraps the <script> of the FSF widget at /server/banner.html,
- which makes it disfunctional. It seems that the problem is the
- C++-style comment `// already a member...'. The solution would be
- either to 1) Include a comment for translators that will appear in
- PO message not to include it; 2) Delete it somehow automatically; 3)
- Persuade Matt not do to such things.
-
-** <meta> elements not translatable.
-
-* General (when bugs are fixed)
-
-** The documentation is not complete, and should be improved.
-
-** Experiment with msgmerge's `--previous' option and make it the
- default, if feasible. Requires gettext >= 0.16.
-
-** Write a script that will itself invoke $(MAKE), log all output in a
- file and cvs commit everything ought to be committed. Deal with SSH
- woes in order the whole operation to be performed automatically.
-
-** GNU Coding Standards compliance.
-
-*** Standardize all variables'/rules' names.
-
-*** Wrap long lines where possible.
-
-** Add a `check' target (probably using Autoconf or DejaGNU) that would
- test the environment and all the tools we use.
-
-** Handle errors properly.
- When make-prototype fails, a proper mail with the error message
- should be sent to www-discuss. Likewise, if a translator commits a
- PO file that is not valid (perhaps this will be very common, at
- least in the beginning).
-
-* Expected problems
-
-** make-prototype.scm uses a regexp to split the articles in pieces.
- That regexp might not fit to all articles, that's why it has to be
- tested with as many as possible.
-
-** RTL.
-
-** Complicated articles like /philosophy/eldred-amicus.
-
-* Non-essential
-
-** Implement a `report' target that would be language specific and will
- output the state of all files for a language team, and extended
- `full-report' that will check the activity of all teams for a
- certain period. For language teams, a `msgfmt --statistics'-similar
- output would be sufficient, as a start (probably omiting files that
- are 100% complete). (This could be done with a script too.)
-
-** It would be nice to add some preprocessing logic to include specific
- HTML comments into the POT, like:
-
- <!-- TRANSLATORS: Do not translate foo as bar, because mumbo jumbo.
- Read keleme.html for more info. -->
-
- This could be useful for some articles under /licenses and for
- several other occasions.
-
-** When commiting automated changes, find a way to generate meaningful
- CVS log entries, describing the changes. Something like:
-
- ,----
- | Atomatically generated commit message by GNUnited Nations.
- |
- | * po/home.pot: $(actual log entry of home.shtml used by the $webmaster).
- | * philosophy/bdk.fa.html: Adding Farsi translation # or whatever the
- | # Persian leader
- | # wrote while
- | # commiting the
- | # PO file
- | * gnu/linux-and-gnu.bg.html: Impoved foo (Closes: bug #1234).
- `----
-
- Possible implementation is this: When a file is modified, an extra
- command will append the cvs log message from the original file.
- Upon successful make && commit, this log file will be deleted. In
- case of failure, it will not be deleted so that the accumulated
- messages will be used in the next run.
-
-** Figure out how to "inject" a language-specific warning, possibly
- from /prep/i18n/outdated.xx.html that will be displayed when the
- page has 20% (or more) messages untranslated. We have to think
- also about a deprecation plan for all gnu.org translated pages, and
- whether this software can help sorting all issues out. Idea: We
- can use the comment <!-- Automatically generated... --> to add a
- fake #include directive, which will tell Apache that this page is
- OK, but in its absence will direct to a separate page (like 404)
- with a a notice that the translation is very outdated and
- links/options like 1) Visit the English article; 2) Visit the
- translation anyway; 3) Help the Foo translation team; 4) Whatever
- we decide.
-
-** PO mode a bit unsuitable for HTML translations.
- The window that gets opened when you hit <RET> on a msgstr in PO
- mode is in Fundamental mode, which leads to many typos that stem
- from the fact that font lock for HTML is not available. Ideally,
- we should find a way to provide a custom code to override PO mode's
- default behaviour. Perhaps even a simple facility to convert a
- standard PO header as generated by Po4a to the recommended format,
- plus probably other useful things that would save purely mechanical
- work.
Index: prep/gnun/fdl.texi
===================================================================
RCS file: prep/gnun/fdl.texi
diff -N prep/gnun/fdl.texi
--- prep/gnun/fdl.texi 9 Feb 2008 17:06:53 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,451 +0,0 @@
address@hidden The GNU Free Documentation License.
address@hidden Version 1.2, November 2002
-
address@hidden This file is intended to be included within another document,
address@hidden hence no sectioning command or @node.
-
address@hidden
-Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc.
-51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
address@hidden display
-
address@hidden 0
address@hidden
-PREAMBLE
-
-The purpose of this License is to make a manual, textbook, or other
-functional and useful document @dfn{free} in the sense of freedom: to
-assure everyone the effective freedom to copy and redistribute it,
-with or without modifying it, either commercially or noncommercially.
-Secondarily, this License preserves for the author and publisher a way
-to get credit for their work, while not being considered responsible
-for modifications made by others.
-
-This License is a kind of ``copyleft'', which means that derivative
-works of the document must themselves be free in the same sense. It
-complements the GNU General Public License, which is a copyleft
-license designed for free software.
-
-We have designed this License in order to use it for manuals for free
-software, because free software needs free documentation: a free
-program should come with manuals providing the same freedoms that the
-software does. But this License is not limited to software manuals;
-it can be used for any textual work, regardless of subject matter or
-whether it is published as a printed book. We recommend this License
-principally for works whose purpose is instruction or reference.
-
address@hidden
-APPLICABILITY AND DEFINITIONS
-
-This License applies to any manual or other work, in any medium, that
-contains a notice placed by the copyright holder saying it can be
-distributed under the terms of this License. Such a notice grants a
-world-wide, royalty-free license, unlimited in duration, to use that
-work under the conditions stated herein. The ``Document'', below,
-refers to any such manual or work. Any member of the public is a
-licensee, and is addressed as ``you''. You accept the license if you
-copy, modify or distribute the work in a way requiring permission
-under copyright law.
-
-A ``Modified Version'' of the Document means any work containing the
-Document or a portion of it, either copied verbatim, or with
-modifications and/or translated into another language.
-
-A ``Secondary Section'' is a named appendix or a front-matter section
-of the Document that deals exclusively with the relationship of the
-publishers or authors of the Document to the Document's overall
-subject (or to related matters) and contains nothing that could fall
-directly within that overall subject. (Thus, if the Document is in
-part a textbook of mathematics, a Secondary Section may not explain
-any mathematics.) The relationship could be a matter of historical
-connection with the subject or with related matters, or of legal,
-commercial, philosophical, ethical or political position regarding
-them.
-
-The ``Invariant Sections'' are certain Secondary Sections whose titles
-are designated, as being those of Invariant Sections, in the notice
-that says that the Document is released under this License. If a
-section does not fit the above definition of Secondary then it is not
-allowed to be designated as Invariant. The Document may contain zero
-Invariant Sections. If the Document does not identify any Invariant
-Sections then there are none.
-
-The ``Cover Texts'' are certain short passages of text that are listed,
-as Front-Cover Texts or Back-Cover Texts, in the notice that says that
-the Document is released under this License. A Front-Cover Text may
-be at most 5 words, and a Back-Cover Text may be at most 25 words.
-
-A ``Transparent'' copy of the Document means a machine-readable copy,
-represented in a format whose specification is available to the
-general public, that is suitable for revising the document
-straightforwardly with generic text editors or (for images composed of
-pixels) generic paint programs or (for drawings) some widely available
-drawing editor, and that is suitable for input to text formatters or
-for automatic translation to a variety of formats suitable for input
-to text formatters. A copy made in an otherwise Transparent file
-format whose markup, or absence of markup, has been arranged to thwart
-or discourage subsequent modification by readers is not Transparent.
-An image format is not Transparent if used for any substantial amount
-of text. A copy that is not ``Transparent'' is called ``Opaque''.
-
-Examples of suitable formats for Transparent copies include plain
address@hidden without markup, Texinfo input format, address@hidden input
-format, @acronym{SGML} or @acronym{XML} using a publicly available
address@hidden, and standard-conforming simple @acronym{HTML},
-PostScript or @acronym{PDF} designed for human modification. Examples
-of transparent image formats include @acronym{PNG}, @acronym{XCF} and
address@hidden Opaque formats include proprietary formats that can be
-read and edited only by proprietary word processors, @acronym{SGML} or
address@hidden for which the @acronym{DTD} and/or processing tools are
-not generally available, and the machine-generated @acronym{HTML},
-PostScript or @acronym{PDF} produced by some word processors for
-output purposes only.
-
-The ``Title Page'' means, for a printed book, the title page itself,
-plus such following pages as are needed to hold, legibly, the material
-this License requires to appear in the title page. For works in
-formats which do not have any title page as such, ``Title Page'' means
-the text near the most prominent appearance of the work's title,
-preceding the beginning of the body of the text.
-
-A section ``Entitled XYZ'' means a named subunit of the Document whose
-title either is precisely XYZ or contains XYZ in parentheses following
-text that translates XYZ in another language. (Here XYZ stands for a
-specific section name mentioned below, such as ``Acknowledgements'',
-``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title''
-of such a section when you modify the Document means that it remains a
-section ``Entitled XYZ'' according to this definition.
-
-The Document may include Warranty Disclaimers next to the notice which
-states that this License applies to the Document. These Warranty
-Disclaimers are considered to be included by reference in this
-License, but only as regards disclaiming warranties: any other
-implication that these Warranty Disclaimers may have is void and has
-no effect on the meaning of this License.
-
address@hidden
-VERBATIM COPYING
-
-You may copy and distribute the Document in any medium, either
-commercially or noncommercially, provided that this License, the
-copyright notices, and the license notice saying this License applies
-to the Document are reproduced in all copies, and that you add no other
-conditions whatsoever to those of this License. You may not use
-technical measures to obstruct or control the reading or further
-copying of the copies you make or distribute. However, you may accept
-compensation in exchange for copies. If you distribute a large enough
-number of copies you must also follow the conditions in section 3.
-
-You may also lend copies, under the same conditions stated above, and
-you may publicly display copies.
-
address@hidden
-COPYING IN QUANTITY
-
-If you publish printed copies (or copies in media that commonly have
-printed covers) of the Document, numbering more than 100, and the
-Document's license notice requires Cover Texts, you must enclose the
-copies in covers that carry, clearly and legibly, all these Cover
-Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
-the back cover. Both covers must also clearly and legibly identify
-you as the publisher of these copies. The front cover must present
-the full title with all words of the title equally prominent and
-visible. You may add other material on the covers in addition.
-Copying with changes limited to the covers, as long as they preserve
-the title of the Document and satisfy these conditions, can be treated
-as verbatim copying in other respects.
-
-If the required texts for either cover are too voluminous to fit
-legibly, you should put the first ones listed (as many as fit
-reasonably) on the actual cover, and continue the rest onto adjacent
-pages.
-
-If you publish or distribute Opaque copies of the Document numbering
-more than 100, you must either include a machine-readable Transparent
-copy along with each Opaque copy, or state in or with each Opaque copy
-a computer-network location from which the general network-using
-public has access to download using public-standard network protocols
-a complete Transparent copy of the Document, free of added material.
-If you use the latter option, you must take reasonably prudent steps,
-when you begin distribution of Opaque copies in quantity, to ensure
-that this Transparent copy will remain thus accessible at the stated
-location until at least one year after the last time you distribute an
-Opaque copy (directly or through your agents or retailers) of that
-edition to the public.
-
-It is requested, but not required, that you contact the authors of the
-Document well before redistributing any large number of copies, to give
-them a chance to provide you with an updated version of the Document.
-
address@hidden
-MODIFICATIONS
-
-You may copy and distribute a Modified Version of the Document under
-the conditions of sections 2 and 3 above, provided that you release
-the Modified Version under precisely this License, with the Modified
-Version filling the role of the Document, thus licensing distribution
-and modification of the Modified Version to whoever possesses a copy
-of it. In addition, you must do these things in the Modified Version:
-
address@hidden A
address@hidden
-Use in the Title Page (and on the covers, if any) a title distinct
-from that of the Document, and from those of previous versions
-(which should, if there were any, be listed in the History section
-of the Document). You may use the same title as a previous version
-if the original publisher of that version gives permission.
-
address@hidden
-List on the Title Page, as authors, one or more persons or entities
-responsible for authorship of the modifications in the Modified
-Version, together with at least five of the principal authors of the
-Document (all of its principal authors, if it has fewer than five),
-unless they release you from this requirement.
-
address@hidden
-State on the Title page the name of the publisher of the
-Modified Version, as the publisher.
-
address@hidden
-Preserve all the copyright notices of the Document.
-
address@hidden
-Add an appropriate copyright notice for your modifications
-adjacent to the other copyright notices.
-
address@hidden
-Include, immediately after the copyright notices, a license notice
-giving the public permission to use the Modified Version under the
-terms of this License, in the form shown in the Addendum below.
-
address@hidden
-Preserve in that license notice the full lists of Invariant Sections
-and required Cover Texts given in the Document's license notice.
-
address@hidden
-Include an unaltered copy of this License.
-
address@hidden
-Preserve the section Entitled ``History'', Preserve its Title, and add
-to it an item stating at least the title, year, new authors, and
-publisher of the Modified Version as given on the Title Page. If
-there is no section Entitled ``History'' in the Document, create one
-stating the title, year, authors, and publisher of the Document as
-given on its Title Page, then add an item describing the Modified
-Version as stated in the previous sentence.
-
address@hidden
-Preserve the network location, if any, given in the Document for
-public access to a Transparent copy of the Document, and likewise
-the network locations given in the Document for previous versions
-it was based on. These may be placed in the ``History'' section.
-You may omit a network location for a work that was published at
-least four years before the Document itself, or if the original
-publisher of the version it refers to gives permission.
-
address@hidden
-For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
-the Title of the section, and preserve in the section all the
-substance and tone of each of the contributor acknowledgements and/or
-dedications given therein.
-
address@hidden
-Preserve all the Invariant Sections of the Document,
-unaltered in their text and in their titles. Section numbers
-or the equivalent are not considered part of the section titles.
-
address@hidden
-Delete any section Entitled ``Endorsements''. Such a section
-may not be included in the Modified Version.
-
address@hidden
-Do not retitle any existing section to be Entitled ``Endorsements'' or
-to conflict in title with any Invariant Section.
-
address@hidden
-Preserve any Warranty Disclaimers.
address@hidden enumerate
-
-If the Modified Version includes new front-matter sections or
-appendices that qualify as Secondary Sections and contain no material
-copied from the Document, you may at your option designate some or all
-of these sections as invariant. To do this, add their titles to the
-list of Invariant Sections in the Modified Version's license notice.
-These titles must be distinct from any other section titles.
-
-You may add a section Entitled ``Endorsements'', provided it contains
-nothing but endorsements of your Modified Version by various
-parties---for example, statements of peer review or that the text has
-been approved by an organization as the authoritative definition of a
-standard.
-
-You may add a passage of up to five words as a Front-Cover Text, and a
-passage of up to 25 words as a Back-Cover Text, to the end of the list
-of Cover Texts in the Modified Version. Only one passage of
-Front-Cover Text and one of Back-Cover Text may be added by (or
-through arrangements made by) any one entity. If the Document already
-includes a cover text for the same cover, previously added by you or
-by arrangement made by the same entity you are acting on behalf of,
-you may not add another; but you may replace the old one, on explicit
-permission from the previous publisher that added the old one.
-
-The author(s) and publisher(s) of the Document do not by this License
-give permission to use their names for publicity for or to assert or
-imply endorsement of any Modified Version.
-
address@hidden
-COMBINING DOCUMENTS
-
-You may combine the Document with other documents released under this
-License, under the terms defined in section 4 above for modified
-versions, provided that you include in the combination all of the
-Invariant Sections of all of the original documents, unmodified, and
-list them all as Invariant Sections of your combined work in its
-license notice, and that you preserve all their Warranty Disclaimers.
-
-The combined work need only contain one copy of this License, and
-multiple identical Invariant Sections may be replaced with a single
-copy. If there are multiple Invariant Sections with the same name but
-different contents, make the title of each such section unique by
-adding at the end of it, in parentheses, the name of the original
-author or publisher of that section if known, or else a unique number.
-Make the same adjustment to the section titles in the list of
-Invariant Sections in the license notice of the combined work.
-
-In the combination, you must combine any sections Entitled ``History''
-in the various original documents, forming one section Entitled
-``History''; likewise combine any sections Entitled ``Acknowledgements'',
-and any sections Entitled ``Dedications''. You must delete all
-sections Entitled ``Endorsements.''
-
address@hidden
-COLLECTIONS OF DOCUMENTS
-
-You may make a collection consisting of the Document and other documents
-released under this License, and replace the individual copies of this
-License in the various documents with a single copy that is included in
-the collection, provided that you follow the rules of this License for
-verbatim copying of each of the documents in all other respects.
-
-You may extract a single document from such a collection, and distribute
-it individually under this License, provided you insert a copy of this
-License into the extracted document, and follow this License in all
-other respects regarding verbatim copying of that document.
-
address@hidden
-AGGREGATION WITH INDEPENDENT WORKS
-
-A compilation of the Document or its derivatives with other separate
-and independent documents or works, in or on a volume of a storage or
-distribution medium, is called an ``aggregate'' if the copyright
-resulting from the compilation is not used to limit the legal rights
-of the compilation's users beyond what the individual works permit.
-When the Document is included in an aggregate, this License does not
-apply to the other works in the aggregate which are not themselves
-derivative works of the Document.
-
-If the Cover Text requirement of section 3 is applicable to these
-copies of the Document, then if the Document is less than one half of
-the entire aggregate, the Document's Cover Texts may be placed on
-covers that bracket the Document within the aggregate, or the
-electronic equivalent of covers if the Document is in electronic form.
-Otherwise they must appear on printed covers that bracket the whole
-aggregate.
-
address@hidden
-TRANSLATION
-
-Translation is considered a kind of modification, so you may
-distribute translations of the Document under the terms of section 4.
-Replacing Invariant Sections with translations requires special
-permission from their copyright holders, but you may include
-translations of some or all Invariant Sections in addition to the
-original versions of these Invariant Sections. You may include a
-translation of this License, and all the license notices in the
-Document, and any Warranty Disclaimers, provided that you also include
-the original English version of this License and the original versions
-of those notices and disclaimers. In case of a disagreement between
-the translation and the original version of this License or a notice
-or disclaimer, the original version will prevail.
-
-If a section in the Document is Entitled ``Acknowledgements'',
-``Dedications'', or ``History'', the requirement (section 4) to Preserve
-its Title (section 1) will typically require changing the actual
-title.
-
address@hidden
-TERMINATION
-
-You may not copy, modify, sublicense, or distribute the Document except
-as expressly provided for under this License. Any other attempt to
-copy, modify, sublicense or distribute the Document is void, and will
-automatically terminate your rights under this License. However,
-parties who have received copies, or rights, from you under this
-License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
address@hidden
-FUTURE REVISIONS OF THIS LICENSE
-
-The Free Software Foundation may publish new, revised versions
-of the GNU Free Documentation License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns. See
address@hidden://www.gnu.org/copyleft/}.
-
-Each version of the License is given a distinguishing version number.
-If the Document specifies that a particular numbered version of this
-License ``or any later version'' applies to it, you have the option of
-following the terms and conditions either of that specified version or
-of any later version that has been published (not as a draft) by the
-Free Software Foundation. If the Document does not specify a version
-number of this License, you may choose any version ever published (not
-as a draft) by the Free Software Foundation.
address@hidden enumerate
-
address@hidden
address@hidden ADDENDUM: How to use this License for your documents
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and
-license notices just after the title page:
-
address@hidden
address@hidden
- Copyright (C) @var{year} @var{your name}.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.2
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
- Texts. A copy of the license is included in the section entitled ``GNU
- Free Documentation License''.
address@hidden group
address@hidden smallexample
-
-If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
-replace the address@hidden'' line with this:
-
address@hidden
address@hidden
- with the Invariant Sections being @var{list their titles}, with
- the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
- being @var{list}.
address@hidden group
address@hidden smallexample
-
-If you have Invariant Sections without Cover Texts, or some other
-combination of the three, merge those two alternatives to suit the
-situation.
-
-If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of
-free software license, such as the GNU General Public License,
-to permit their use in free software.
-
address@hidden Local Variables:
address@hidden ispell-local-pdict: "ispell-dict"
address@hidden End:
-
Index: prep/gnun/generic.af.html
===================================================================
RCS file: prep/gnun/generic.af.html
diff -N prep/gnun/generic.af.html
Index: prep/gnun/generic.bg.html
===================================================================
RCS file: prep/gnun/generic.bg.html
diff -N prep/gnun/generic.bg.html
--- prep/gnun/generic.bg.html 19 Feb 2008 05:58:47 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,6 +0,0 @@
-<p>ÐолÑ, докладвайÑе гÑеÑки и пÑедложениÑ
оÑноÑно бÑлгаÑÑÐºÐ¸Ñ Ð¿Ñевод
-ÑÑез
-<a href="https://savannah.gnu.org/bugs/?group=www-bg">ÑиÑÑемаÑа за
-пÑоÑледÑване на гÑеÑки</a>
-на <a href="https://savannah.gnu.org/projects/www-bg/">пÑоекÑа за
-пÑевод на www.gnu.org</a>. ÐлагодаÑим Ðи!</p>
Index: prep/gnun/generic.pl.html
===================================================================
RCS file: prep/gnun/generic.pl.html
diff -N prep/gnun/generic.pl.html
Index: prep/gnun/generic.zh-cn.html
===================================================================
RCS file: prep/gnun/generic.zh-cn.html
diff -N prep/gnun/generic.zh-cn.html
Index: prep/gnun/gnun.mk
===================================================================
RCS file: prep/gnun/gnun.mk
diff -N prep/gnun/gnun.mk
--- prep/gnun/gnun.mk 17 Feb 2008 15:16:08 -0000 1.7
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,45 +0,0 @@
-# Copyright (C) 2007, 2008 Free Software Foundation, Inc.
-
-# This file is part of GNUnited Nations.
-
-# GNUnited Nations is free software: you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-
-# GNUnited Nations is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with GNUnited Nations. If not, see <http://www.gnu.org/licenses/>.
-
-TEMPLATE_LINGUAS := af bg
-
-HOME_LINGUAS := bg pl zh-cn
-
-ROOT := keepingup \
- provide
-
-gnu := gnu \
- gnu-history \
- linux-and-gnu \
- rms-lisp \
- why-gnu-linux
-
-philosophy := bdk \
- can-you-trust \
- eldred-amicus \
- free-software-for-freedom \
- free-sw \
- java-trap \
- open-source-misses-the-point \
- philosophy \
- right-to-read \
- schools \
- software-literary-patents \
- sun-in-night-time
-
-ALL_DIRS := gnu \
- philosophy
Index: prep/gnun/gnun.texi
===================================================================
RCS file: prep/gnun/gnun.texi
diff -N prep/gnun/gnun.texi
--- prep/gnun/gnun.texi 20 Feb 2008 07:18:15 -0000 1.17
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,969 +0,0 @@
-\input texinfo
address@hidden %**start of header
address@hidden gnun.info
address@hidden GNUnited Nations Manual
address@hidden FIXME: Would be nice to have it in the format `%:b %:d, %:y', but
address@hidden in English.
address@hidden lastupdate 20.02.2008
address@hidden %**end of header
-
address@hidden Please do not use features of Texinfo >> 4.8, which is the
version
address@hidden available in gNewSense. Thanks.
-
address@hidden FIXME: Add more xrefs, where appropriate.
address@hidden FIXME: Add indexing commands.
-
address@hidden
-
-This manual is for @acronym{GNU}nited Nations, a suite for maintaining
-translations of www.gnu.org essays and other address@hidden
-Last updated on @value{lastupdate}.
address@hidden 1
-Copyright @copyright{} 2008 Free Software Foundation, Inc.
-
address@hidden
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the @acronym{GNU} Free Documentation License,
-Version 1.2 or any later version published by the Free Software
-Foundation; with no Invariant Sections, no Front-Cover Texts, and no
-Back-Cover Texts. A copy of the license is included in the section
-entitled address@hidden Free Documentation License.''
address@hidden quotation
address@hidden copying
-
address@hidden
address@hidden GNUnited Nations Manual
address@hidden Software for maintaining www.gnu.org translations
address@hidden (last updated @value{lastupdate})
address@hidden by Yavor Doganov <@email{yavor@@gnu.org}>
address@hidden
address@hidden 0pt plus 1filll
address@hidden
address@hidden titlepage
-
address@hidden
-
address@hidden Localization
address@hidden
-* GNUnited Nations: (gnun). Maintaining gnu.org translations.
address@hidden direntry
-
address@hidden
address@hidden Top
address@hidden GNUnited Nations
address@hidden
address@hidden ifnottex
-
address@hidden
-* Introduction:: Overview of GNUnited Nations.
-* Usage:: Basic usage, invocation and tips.
-* Internals:: Dive into @acronym{GNUN}.
-* Index::
-* Copying This Manual:: The GNU Free Documentation License.
address@hidden menu
-
address@hidden Introduction
address@hidden Introduction to @acronym{GNU}nited Nations
-
address@hidden Nations (abbreviated @acronym{GNUN}) is a
-collection of makefiles and scripts that are supposed to make the life
-of @url{http://gnu.org} translators easier. Although it is
-specifically developed for the @acronym{GNU} Project's website, it
-could be customized, at least in theory, to fit the needs of other
-internationalized sites. @acronym{GNUN} is in early stage of
-development, but if it proves useful, and if there is sufficient
-interest (and time), it is possible to develop a robust configuration
-interface that would be appropriate for general usage.
-
-It is vitally important to understand that @acronym{GNUN} is
address@hidden a silver bullet that solves all problems. If we have to be
-honest, deploying @acronym{GNUN} in fact even does create some
-(@pxref{Disadvantages}).
-
address@hidden Nations is free software, available under the
address@hidden General Public License.
-
-This manual is organized in way that is suitable both for translators
-and @acronym{GNU} Web Translation managers (plus eventually interested
address@hidden Webmasters, if any). It may also serve as an
-introductory material and reference for new @acronym{GNUN} developers
-and contributors. Hopefully, it might be useful to people who
-customize and adopt the software for a third party site or for their
-own needs. Feel free to skip sections or entire chapters if they are
-irrelevant for your intended usage.
-
-This manual is free documentation, and you can modify and redistribute
-it under the terms of the @acronym{GNU} Free Documentation License.
address@hidden This Manual, ,GNU Free Documentation License}.
-
address@hidden
-* Overview:: What is @acronym{GNUN} and why is necessary?
-* Concepts:: Basic concepts and goals.
-* Advantages:: The goodness @acronym{GNUN} brings.
-* Disadvantages:: Staying on firm ground.
address@hidden menu
-
address@hidden Overview
address@hidden Why @acronym{GNUN} is Being Developed
-
-The @acronym{GNU} Project's website, @uref{http://www.gnu.org}, has
-become considerably large over the years. Maintaining it requires
-significant effort, and sometimes a new web standard is developed
-faster than the time required to migrate all articles to the next
-widely adopted one.
-
-When it comes to internationalization, the problems are so many that
-it is hard to enumerate them. It has become apparent that maintaining
-translations up-to-date is a major undertaking, involving tedious
-skimming through commit logs, reviewing diffs and other medieval
-techniques to catch up. Some translation teams have developed their
-own sets of scripts, but so far there has been no universal solution.
-
-This unpleasant situation, combined with rapid and incompatible
-design changes, have lead some teams to neglect the important work of
-keeping their translation in line with the changing original
-articles. As a consequence, the @acronym{GNU} Project is facing the
-problem of maintaining them in suboptimal ways, in order to keep the
-information updated.
-
-The reasons for developing @acronym{GNU}nited Nations are very similar
-to those that lead to the inception of @acronym{GNU} gettext, or
address@hidden Documentation Utilities (@code{gnome-doc-utils}) some
-years later.
-
address@hidden Concepts
address@hidden What @acronym{GNU}nited Nations is and Should be
-
-The basic concept behind @acronym{GNUN} is that localization of HTML
-articles is similar to localization of computer programs. In
-articles, like in programs, not every string is considered
-translatable, so translatable strings must be identified first, and
-then collected in a file (called ``PO template'') for translation.
-Articles, like programs, tend to change in time, but not every change
-in the sources calls for a translation update. Sometimes the change
-does not affect the translatable strings, but sometimes it does. So,
-translators must have means to identify those changes and apply the
-appropriate updates to the translation.
-
-The @acronym{GNU} @code{gettext} package already provides the needed
-infrastructure for maintaining translations using PO files.
address@hidden, , Introduction, gettext, GNU gettext tools}, for a basic
-overview. @acronym{GNU}nited Nations fills the gaps to apply this
-infrastructure to articles in @url{http://gnu.org} web
address@hidden process of converting HTML to PO and the other way
-around is performed using po4a (``po for anything''), see
address@hidden://po4a.alioth.debian.org}.}
-
-The following diagram summarizes the relation between the files
-handled by @acronym{GNUN}. It is followed by somewhat detailed
-explanations, which you should read while keeping an eye on the
-diagram. Having a clear understanding of these interrelations will
-surely help translators and web maintainers.
-
address@hidden
address@hidden
-.---<--- * Original ARTICLE.html
-|
-| .---> ARTICLE.pot ---> * ARTICLE.LANG.po --->---.
-`---+ |
- `--->---. .------<----------------------------'
- | |
- | `---.
- | +---> Translated ARTICLE.LANG.html
- `-------'
address@hidden group
address@hidden example
-
-The indication @samp{*} appears in two places in this picture, and
-means that the corresponding file is intended to be edited by humans.
-The author or web maintainer edits the original
address@hidden@var{article}.html}, and translators edit
address@hidden@address@hidden All other files are regenerated
-by @acronym{GNUN} and any manual changes on them will be lost on the
-next run.
-
-Arrows denote dependency relation between files, where a change in one
-file will affect the other. Those automatic changes will be applied
-by running @samp{make -C prep/gnun}. This is the primary way to
-invoke @acronym{GNUN}, since it is implemented as a set of recipes for
address@hidden @code{make}.
-
-First, @acronym{GNUN} extracts all translatable strings from the
-original English article @address@hidden into
address@hidden@var{article}.pot}. The resulted file is suitable for
-manipulation with the various @acronym{GNU} @samp{gettext} utilities.
-It contains all original article strings and all translations are set
-to empty. The letter @code{t} in @file{.pot} marks this as a Template
-PO file, not yet oriented towards any particular language.
-
-The first time though, there is no @address@hidden@var{lang}.po}
-yet, so a translator must manually copy @address@hidden to
address@hidden@address@hidden, where @var{lang} represents the
-target language. See FIXME:``Introducing new translation language for
-an article'' for details.
-
-Then comes the initial translation of messages in
address@hidden@address@hidden Translation in itself is a whole
-matter, whose complexity far overwhelms the level of this manual.
-Nevertheless, a few hints are given in some other chapter of this
-manual (FIXME:Translators (but only if we would like to include some
-practical advices to candidate translators on how to join a gnu.org
-translating team)). You will also find there indications about how to
-contact translating teams, or becoming part of them, for sharing your
-translating concerns with others who target the same native language.
-
-You may use any compatible PO editor to add translated messages into
-the PO file. @xref{Editing, , Editing, gettext, GNU gettext tools},
-for more information.
-
-When the PO file actually exists (hopefully populated with initial
-translations), @acronym{GNUN} generates
address@hidden@address@hidden file. It takes its structure
-from the original @address@hidden, but all translatable
-strings are replaced with their translations specified in
address@hidden@address@hidden
-
-Original articles sometimes change. A new paragraph is being added or
-a tiny change in the wording is introduced. Also, some articles are
-dynamic in nature, like ones containing news entries or a list of
-other articles. If the original article changes, @acronym{GNUN} will
-automatically rebuild @address@hidden, and will merge the
-changes to @address@hidden@var{lang}.po}. Any outdated
-translations will be marked as fuzzy, any new strings will be added
-with empty translations, waiting to be translated. In the same run
address@hidden@address@hidden will be rebuilt so the relevant
-strings in the translation will be substituted with the original
-English text, until the translation teams update them in
address@hidden@address@hidden
-
-Those changes in the original article that do not affect the
-translatable strings will not lead to changes in
address@hidden@address@hidden Thus, no actions from translators
-will be needed. @address@hidden@var{lang}.html} will be
-automatically regenerated to reflect the changes.
-
-FIXME: The following paragraphs should go to a separate section that
-explains those details like exact paths in www, diagram with the basic
-directory layout, additional files like .translinks, etc.
-
-The POT for every article under @acronym{GNUN}'s control is kept in
-the `www' repository under a special directory @file{po/}, which is a
-sub-directory of the relevant directory in the `www' tree. So, for
address@hidden://www.gnu.org/philosophy/free-sw.html} that is
address@hidden/po/}. Except @file{free-sw.pot}, this directory
-holds the canonical source of every translation, like
address@hidden, @file{free-sw.ca.po}, etc.
-
-Several additional features are implemented, like automatic update of
-the list of the available translations. For example, if a new
-translation is added and the list of translations in
address@hidden is updated, all translated
address@hidden@var{lang}.html} will be regenerated. This saves a lot
-of tedious, repetitive work. There is a basic infrastructure to
-``inject'' general information about a translation team---like a note
-how to contact the team, or how to report a bug/suggestion for
-improvement. Translators' credits are also handled, as well as
-translators' notes, if any.
-
address@hidden can be extended, and new features will certainly be
-added. The @file{TODO} file currently lists some of them, but new
-ideas pop up quite often. The plan is to make a solid foundation and
-develop front-ends---a web front-end, possibly based on Pootle, a
-statistics facility, probably a wiki compiler, and more.
-
address@hidden Advantages
address@hidden Major Advantages of @acronym{GNUN}
-
-Here is a simple list of situations where we hope this suite would
-prove to be useful.
-
address@hidden
address@hidden
-Automatic rebuild of all translations when the original article
-changes. This is the most important feature, as it prevents
-accumulation of seriously outdated translations.
-
address@hidden
-Global update of the whole site. Apply the previous point to the web
-server templates (under @file{server/} in the `www' repository). A
-single change to such a file will affect literally @emph{all}
-articles, translated or not.
-
address@hidden
-Urgent notices. Sometimes an ``urgent'' notice is added by the
-webmasters, which should appear on all pages. Typically this is about
-an event where urgent action is needed, although often it is only
-relevant to a single country or even a particular city. Such a notice
-will propagate to all pages, and translators may choose whether to
-translate it or not. For example, the Urdu translation team may
-conclude that there are only a few Urdu speakers in Massachusetts, to
-participate in an event that will happen in Boston, so translating the
-``urgent'' notice may not be very ``urgent'' for Urdu. However, such
-notice will appear in all translated pages and people who usually read
-gnu.org pages in their native language will see it, so they can take
-action as necessary. When the notice is removed, often in a week or
-two, it will disappear without translators' intervention, whether they
-translated it or not.
-
address@hidden
-Simplification of the translation process---lots of errors and typos
-come from the fact that translators basically have to duplicate the
-whole HTML markup of the original. The PO files eliminate most of the
-basic markup, which is where most of the validation errors come from.
-
address@hidden
-Markup consistency site-wide---it would be substantially easier to
-update the site to a future standard, because translations will
-naturally follow the changes in the original articles. This also
-means that translation teams do not have to undergo the boring process
-of converting their articles to the new @acronym{SSI}-based layout;
-this will be done automatically.
-
address@hidden
-Easy updates by translators. Modified paragraphs, links, etc. will
-appear as ``fuzzy'' strings in the PO files, newly added ones will
-appear as ``untranslated'', and deleted will appear as ``obsolete''.
-It is substantially easier to update a PO file, where a keystroke
-takes you to the part that needs updating, whatever it may be.
-
address@hidden
-Reporting and statistics. Since the basis is standard PO files, which
-are the canonical source of the translations, it is easy to manipulate
-them and extract useful information.
address@hidden itemize
-
address@hidden Disadvantages
address@hidden Known Bugs and Limitations
-
-As it happens in real life, we don't wear pink glasses and are aware
-of certain limitations and annoyances of this semi-automatic system.
-
address@hidden
address@hidden
-Often it is hard to figure out where precisely a change was made. A
-change in one single word in a long paragraph of the HTML article will
-lead to the whole of it being marked as ``fuzzy'' in the PO files. So
-don't unsubscribe from @email{www-commits@@gnu.org} yet, and be
-prepared to check the CVS history of the original article.
-
address@hidden
-We plan to invoke a build once a day, because doing it more often will
-potentially generate more messages to the mailing list in the form of
-commit notifications. This has its drawback, since translators will
-have to wait for a day until their PO files are updated, and another
-day for the @address@hidden articles to get generated, after
-they commit the updated POs.
-
address@hidden
-Currently there is no way a translation team can take advantage of
address@hidden while following their own translation process, because
-the suite is tied to the official repository. We hope that we will
-resolve this problem soon.
address@hidden itemize
-
address@hidden Usage
address@hidden General Usage
-
address@hidden
-If anything may go wrong, it will definitely go wrong.
----Murphy's Law
-
-Murphy is an optimist.
----O'Rielly's Law
address@hidden flushright
address@hidden 1
-
address@hidden currently consists of a few makefiles, scripts and
-optional @address@hidden files, intended to contain
-article-independent but team-specific information. They are designed
-to reside in the @file{prep/gnun/} directory, but this may change. In
-all examples in this manual, ``invoking'' means executing on the
-command line @command{make -C prep/gnun/ address@hidden
address@hidden@var{value} @dots{}]} while the working directory is
-the root in the `www' web repository. For the purpose of brevity, we
-will refer to the above command as simply @command{make}, which is
-equivalent to @command{cd prep/gnun ; make}. It is desirable never to
-invoke @command{make} with the @option{-k} (@option{--keep-going})
-option, because an eventual error in only one make recipe might create
-a mess in many articles, both original and translated. Do this with
-caution, and generally only when debugging in a safe environment.
-
-The build process is intended to be invoked by a cron job, although
-manual intervention to a certain degree is possible.
-
address@hidden
-* Invoking GNUN:: How to trigger a (re)build.
-* Main Variables:: Specifying what to build.
-* PO Files:: The gentle art of editing PO files.
address@hidden menu
-
address@hidden Invoking GNUN
address@hidden Invoking GNUN
-
-The central part of @acronym{GNU}nited Nations is a makefile; actually
-a @file{GNUmakefile} since it heavily relies on features and
-extensions available in @acronym{GNU} Make. Thus, invoking a build
-consists of typing @command{make} on the command line, or within cron.
-If you are deploying the software on a non-GNU machine, probably
address@hidden Make is installed and available as @command{gmake}. If
-not, you should seriously consider installing it, since as far as we
-know, the build will fail otherwise. See
address@hidden://www.gnu.org/software/make} for information how to
-download and install @acronym{GNU} Make.
-
-If you don't specify a target, @command{make} by default builds the
-target @code{all}, which in this case is to rebuild all translations
-that are not up-to-date. However, there are special targets that do
-not depend on the standard @code{all} target, which can be built by
address@hidden @var{target}}. Some of the variables in the next
-section apply to them, and some do not.
-
address@hidden
-* Runtime Variables:: Variables to control the build process.
-* Special Targets:: Targets that are not built by default.
address@hidden menu
-
address@hidden Runtime Variables
address@hidden Variables to Control the Build Process
-
-The build process has several modes of operation, and they all relate
-to the handling of files that are to be added to the repository or
-performing certain sanity checks at build time. The variables are
-specified on the command line, after @command{make}, in the form
address@hidden, e.g. @command{make VCS=yes}. In the future,
-additional features will be implemented in a similar fashion.
-
address@hidden @samp
address@hidden VCS=no
address@hidden @dots{}
-Do not add any files to the repository. This is the default. You may
-as well omit to define @code{VCS} entirely; there is no special code
-that expects assigning the value `no'.
-
address@hidden VCS=yes
-Automatically add any new files in the repository. These are any POT
-files, if they are generated for the first time, and the translated
-articles (@address@hidden) in HTML format. In addition, if
-there is no @file{prep/gnun/address@hidden file for the
-specific language an article is being generated, an empty file will be
-added. Finally, any missing PO and their HTML counterparts of the
-server templates will be added, computed on the basis of the
address@hidden variable.
-
address@hidden VCS=always
-Because @acronym{GNU} Make considers the targets up-to-date after a
-successful build, if it was performed with no VCS interaction, the
-important newly created files will not be added (and committed when
-you do @command{cvs commit}) in the repository. Assigning this value
-enables additional check and forcefully adds all files. Use it
-sparingly, since it is very slow and generally less reliable.
-
address@hidden VALIDATE=no
address@hidden @dots{}
-Does not perform validation of the HTML articles and PO files. This
-is the default, and not defining this variable has the same effect.
-
address@hidden VALIDATE=yes
-Validates all original articles before generating the POTs, to ensure
-that the ultimate source is valid XHMTL. Also, validates all
-generated translations in HTML format and all PO files. It is highly
-recommended to run the build this way, even if it is a bit tedious to
-fix the errors that are reported as a result of enforcing validation.
address@hidden table
-
-Note that @code{VCS=yes,always} is a valid combination: because POT
-files of the server templates are not handled by @code{always},
-running the build this way will commit any newly added files as
-specified in @code{TEMPLATE_LINGUAS} and will perform additional check
-at the end, @code{cvs add}-ing all necessary files.
-
address@hidden Special Targets
address@hidden Targets Specified on the Command Line
-
-Some targets are not built by default, because they are only useful
-under certain circumstances. Think of them like semi-automated
-commands or canned command sequences that are more complicated, and
-more importantly, whose arguments are variables computed at the time
address@hidden reads the makefiles---the filesets they affect are
-specific and already defined, one way or another.
-
address@hidden
-* sync::
-* clean::
-* distclean::
address@hidden menu
-
address@hidden sync
address@hidden The @code{sync} target
-
-The @code{sync} target has a simple task: synchronize the
address@hidden English} articles from a canonical repository, like
-`www'. It is very important that such synchronization happens,
-because it is desirable to develop the software and add more features
-in a testbed, while the `official instance' operates on the official
-repository in a predictable way.
-
-It is recommended that you `build' the @code{sync} target from a cron
-job, some time before the general build occurs. That way,
-prerequisites (e.g. original @file{.html} articles) will be updated
-from the canonical repository and the subsequent @command{make}
-invocation, possibly run by cron as well, will update all
-translations.
-
-The @code{VCS} variable affects the behavior: if it is defined to
-`yes' then the synchronized files are committed to the `testing'
-repository, e.g. the @var{destination}. In addition, if a file meant
-to be synchronized disappeared from the @var{source}, a warning mail
-will be sent to the address defined in the @code{devel_addr} variable
-(defined only in @file{GNUmakefile}). The build will continue without
-failure, and will sync and commit all other files, but will send the
-same email message again if the file is still present in the
address@hidden variable during a subsequent invocation.
-
-In addition, @code{sync} synchronizes all ``verbatim'' server
-templates that are not under @acronym{GNUN}'s control, such as
address@hidden/header.html}, @file{server/footer.html} and their
-translations, as defined in the @code{verbatim-templates} variable.
-This is important, as these files may change in the master repository,
-while the validation of the html files in the development repository
-will be performed with the old templates expanded, thus making this
-specific test more or less bogus.
-
address@hidden has no effect on this target, as well as
address@hidden
-
address@hidden clean
address@hidden The @code{clean} target
-
-Not implemented yet.
-
address@hidden distclean
address@hidden The @code{distclean} target
-
-Not implemented yet.
-
address@hidden Main Variables
address@hidden Defining Articles to be Built
-
-The file @file{gnun.mk} contains variable definitions, based on which
-almost all other important variables are computed. In other words,
-the variables defined in that file directly affect the overall
-behavior of the build process.
-
-There are two types of variables, which are specifically separated in
-order to make translators' life easier: variables that translators are
-free to modify and variables that are modified by the web-translators
address@hidden because presumably, they are more familiar with
address@hidden Nations' internals. From a purely technical point
-of view, there is no difference.}, ideally after performing some local
-tests. A translation team leader should update only
address@hidden and @code{HOME_LINGUAS}; everything else is
-supposed to be built auto-magically, without manual intervention. If
-not, that is a bug that should be reported and fixed.
-
address@hidden @samp
address@hidden TEMPLATE_LINGUAS
-Add here your language code @emph{if and only if} you have all the
-server templates translated, and have committed
address@hidden/po/address@hidden and
address@hidden/po/address@hidden, as well as the templates
-that are not under @acronym{GNUN}'s control, like
address@hidden/address@hidden and
address@hidden/address@hidden
-
address@hidden HOME_LINGUAS
-Add your language code if you have already committed
address@hidden/address@hidden, that way the homepage for your language
-will be built. It is not acceptable to have your language code
-defined in this variable, but not in @code{TEMPLATE_LINGUAS}.
-
address@hidden ROOT
-Add here articles that are in the server root, like
address@hidden and @file{provide.html}. Always write only the
-basename of the article, i.e. if you add these two articles, the value
-of @code{ROOT} should be @code{keepingup provide}. This is true for
-all the variables that expect values in the form of article names.
-
address@hidden ALL_DIRS
-The list of directories containing articles, like @file{philosophy},
address@hidden, @file{licenses}, etc.
-
address@hidden gnu
address@hidden philosophy
address@hidden @address@hidden
-A space-separated list of basenames for articles residing in
address@hidden, for which POTs will be generated and updated when the
-original article changes. If an article is missing here, there is no
-way its translations to be maintained via @acronym{GNUN}.
address@hidden table
-
address@hidden PO Files
address@hidden Working with PO Files
-
-We anticipate that some gnu.org translators will find this format odd
-or inconvenient, if they never happened to work with PO files before.
-Don't worry, you will soon get accustomed to it. It is the
-established format for translations in the Free World, and you should
-have no problems if you have translated software before.
-
-The most efficient way to edit a PO file is using a specialized PO
-editor, because each of them represents and treats gettext messages in
-a consistent and predictable way. It is possible to edit a PO file
-with an ordinary plain text editor, but extra effort would be
-necessary to make it valid. Here is a list of widely used PO editors:
-
address@hidden
address@hidden
-PO mode. We recommend using @acronym{GNU} Emacs in PO mode, because
-Emacs is the program that is suitable for performing any task when it
-comes to maintaining the @acronym{GNU} Project's website. Provided
-that you have @acronym{GNU} gettext installed, any @file{.po} file you
-visit should automatically switch to PO mode. You can enable/disable
-it by @code{M-x po-mode @key{RET}}. On some @acronym{GNU}/Linux
-distros such as gNewSense, PO mode is available in a separate package,
address@hidden See @uref{http://www.gnu.org/software/gettext}.
-
address@hidden
-gTranslator---the @acronym{GNOME} PO editor. Has some known bugs, but
-they shouldn't affect gnu.org translations as formulas that express
-plural forms are not used. See
address@hidden://gtranslator.sourceforge.net}.
-
address@hidden
-KBabel---likewise for @acronym{KDE}. See
address@hidden://kbabel.kde.org}.
-
address@hidden
-Poedit---another editor that is based on the @code{wxWidgets}
-toolkit. See @uref{http://www.poedit.net}.
address@hidden itemize
-
address@hidden
-* New Translation:: How to start a new translation.
-* Migrating:: How to migrate an existing translation to a PO
- format under @acronym{GNUN}'s control.
-* generic.LANG.html:: Specifying information that will propagate in
- every translation in a certain language.
address@hidden menu
-
address@hidden New Translation
address@hidden Starting a New Translation
-
-To start a new translation, the easiest way is to copy the existing
-POT as @address@hidden, where @var{lang} is your language
-code. For example, to prepare for a new translation of the essay
address@hidden://www.gnu.org/philosophy/freedom-or-copyright.html}, you
-can simply do @command{cd philosophy/po ; cp freedom-or-copyright.pot
address@hidden and then edit the latter. If
address@hidden does not exist it is because either
-the article is not yet ``templated'' (i.e. migrated to the new style),
-or the @acronym{GNUN} maintainers have not yet added it to the value
-of the appropriate variable in @file{prep/gnun/gnun.mk}. In that
-case, just ask them to do the necessary in order the POT to be
-generated.
-
-You could also use the @command{msginit} utility that would populate
-the PO file header with the right information, provided your
-environment is set up correctly. @xref{msginit Invocation, ,,
-gettext, GNU gettext tools}.
-
-The PO file header as generated usually looks like this:
-
address@hidden
address@hidden
-# SOME DESCRIPTIVE TITLE
-# Copyright (C) YEAR Free Software Foundation, Inc.
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2008-02-06 16:25-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: ENCODING"
address@hidden group
address@hidden example
-
-You have to edit the header to match the already established
-conventions, and the rules for gnu.org translations. Here is an
-example of a properly edited header:
-
address@hidden
address@hidden
-# Bulgarian translation of
http://www.gnu.org/philosophy/@/freedom-or-copyright.html
-# Copyright (C) 2008 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gnu.org article.
-# Yavor Doganov <yavor@@gnu.org>, 2008.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: freedom-or-copyright.html\n"
-"POT-Creation-Date: 2008-02-06 16:25-0500\n"
-"PO-Revision-Date: 2008-02-09 15:23+0200\n"
-"Last-Translator: Yavor Doganov <yavor@@gnu.org>\n"
-"Language-Team: Bulgarian <dict@@fsa-bg.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8-bit"
address@hidden group
address@hidden example
-
-Notice the absence of the ``fuzzy'' marker; you should ``unfuzzy'' the
-header after entering the necessary information (this is done by
-simply pressing @key{TAB} in PO mode). The @code{PO-Revision-Date}
-is automatically filled in when you save the file in PO mode and in
-most of the other PO editors.
-
-The @code{Lanuage-Team} field should contain the mailing list on which
-the translation team can be reached---sometimes this is the alias
address@hidden@@gnu.org}, but in some cases it is a
-separate, address@hidden list.
-
-There are some special messages that appear in the POT and PO:
-
address@hidden @samp
address@hidden *GNUN-SLOT: TRANSLATOR'S NOTES*
-This is for translator's notes that are injected in the resulting
-translation. See FIXME:Foo, for more information. If your
-translation does not have notes, you @emph{must} translate this as a
-space, that is, @key{SPC}.
-
address@hidden *GNUN-SLOT: TRANSLATOR'S CREDITS*
-This is again optional, and should contain the name (and address) of
-the person who made the translation. For example:
-
address@hidden
-<b>Traduction</b>: Benjamin Drieu <a
-href="mailto:foo@@example.org"><foo@@example.org></a>, 2007,
-2008.
address@hidden example
-
-``Translate'' this string as a space (@key{SPC}) if you do not want
-your name to appear there.
address@hidden table
-
-Most of the PO editors do not wrap long lines that inevitably appear
-in @code{msgstr}'s. If that happens, long lines make reading
-subsequent diffs harder, and are generally annoying for most people.
-If this issue bothers you, you can ``normalize'' the already finished
-PO translation by executing on the command line @command{cat
address@hidden | msgcat - -o @var{file}.po}, before installing it in
-the repository. Either way, the build system will treat it is a valid
-PO file.
-
-It is highly desirable that you check if the PO file you finished
-translating (or editing) is valid, before committing it. This is done
-by running @command{msgfmt -cv -o /dev/null @var{file}} or by simply
-pressing @kbd{V} in PO mode. The build system automatically verifies
-each PO file when invoked with @code{VALIDATE=yes}, but you won't get
-a warm and fuzzy feeling if a stupid typo you made halts the whole
-update of all translations. Such things happen to everyone, so it is
-a good practice to check before you actually commit.
-
address@hidden Migrating
address@hidden Transforming existing translation in PO format
-
-Migrating an existing translation to a PO file format is basically
-editing the header as described in the previous section, and
-populating each of the messages by copying the already translated text
-and/or markup from the existing translation in HTML format in the
-relevant message.
-
-Typically, you will visit @file{po/address@hidden (in PO mode) and
address@hidden@var{lang}.html} (in HTML mode) in another buffer. Then you
-can copy a paragraph or an element from the latter and yank it in the
-relevant message in the former. Be extra careful, since this is the
-time to check @emph{precisely} that the translation corresponds to the
-original. Further changes will be reflected, but if your ``initial''
-PO file is not a 100% match, that would not necessarily mean that it
-is an improvement. Since it is very easy to do this kind of check,
-because the relevant @code{msgid} and @code{msgstr} appear one above
-the other in the same buffer (or the similar concept in other PO
-editors), please @emph{do} perform this initial sanity check even if
-you are confident that the translation you have been yanking strings
-from is a completely up-to-date translation.
-
-There is no need to delete the existing HTML translation,
address@hidden will automatically overwrite it. The only thing a
-translator should do is to commit the PO file in the repository.
-
-When an essay has been translated by several people through the years,
-it is important that this information is recorded and reflected in the
-PO file. In the future, special targets may be added to enable the
address@hidden to check who translated a particular article, and when.
-
-A recommended way to do this is as follows:
-
address@hidden
address@hidden
-# French translation of http://www.gnu.org/philosophy/@/bsd.html
-# Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gnu.org article.
-# C@'edric Corazza <cedric.corazza@@wanadoo.fr>, 2006, 2008.
-# address@hidden Dominguez <taz@@gnu.org>, 2007.
address@hidden group
address@hidden example
-
-In this example, it is clear that C@'edric made the initial
-translation, address@hidden made some changes in 2007, and the original
-translator returned in 2008 and continued maintaining it.
-
address@hidden generic.LANG.html
address@hidden The @address@hidden file
-
-The files @file{prep/gnun/address@hidden are special: if no
-such file exists for your language, an empty file will will be created
-(and added to the repository if specified @code{VCS=yes}). This file
-is optional, and should contain a short message in your native
-language, ideally providing more information about the translation
-team or where to report bugs. For example:
-
address@hidden
-<p>To join the Fooish translation team, see <a
-href="http://gnu.org/@/server/@/standards/@/translations/@/www-foo">the
-Foo team homepage</a>.</p>
address@hidden example
-
-The contents of @address@hidden is injected right after
-the translators' credits, if any, and before the timestamp. It should
-be valid XHTML markup.
-
-When you modify this file, for example, adding a message to the
-existing empty file or changing a URL, such modification will affect
address@hidden articles of the language @var{lang} in
address@hidden@var{lang}.html}. The next time a build occurs, all
-translations of the language code @var{lang} (i.e. all
address@hidden@var{lang}.html}, including the homepage), will be modified to
-include the contents of this special file.
-
address@hidden Internals
address@hidden Unexciting Information for @acronym{GNUN}'s Operation
-
-This chapter might be of interest probably only to people who would
-have special interest in the software, plan to enhance it or develop a
-front-end.
-
address@hidden
-* Scripts:: Helper scripts.
-* Rules:: The knotty rules explained.
address@hidden menu
-
address@hidden Scripts
address@hidden Internally Used Scripts
-
-For the time being there are two helper scripts, used internally as
-commands with certain arguments in the makefile rules. They can be
-invoked separately, as stand-alone programs, and sometimes they are
-useful on their own.
-
address@hidden
-* make-prototype::
-* validate-html::
address@hidden menu
-
address@hidden make-prototype
address@hidden The @command{make-prototype} Script
-
-This is a Guile script which makes the ``prototype'' file,
address@hidden@var{lang}.proto}, from which the POT is generated.
address@hidden is designed in such a way, because it would be no big
-improvement if links to other translations ended up in the POT---it
-would mean that translators would have to manually update their PO
-file when a new translation is added.
-
-In addition, @command{make-prototype} guards the timestamp (the
address@hidden RCS keyword) in order the timestamp of the translation to
-be updated @emph{only} when there are actual changes, being automatic
-or not.
-
-Finally, @command{make-prototype} ``injects'' the artificial elements
-`*GNUN-SLOT: TRANSLATOR'S NOTES*' and `*GNUN-SLOT: TRANSLATOR'S
-CREDITS*', thanks to which it is possible to insert the name of the
-translator and translator's notes, if necessary. @xref{New
-Translation}.
-
-Here are the options that @command{make-prototype} accepts:
-
address@hidden @option
address@hidden --article
-Process the input file as an article. This is the default.
-
address@hidden --home
-Process the input article as a homepage. Specify this when you want
-to create a @file{.proto} file for a homepage.
-
address@hidden -i
address@hidden address@hidden
-Input file, which can be a common article (essay) or a homepage.
-
address@hidden -g
address@hidden address@hidden
-Common notes for a translation team; this is the
address@hidden@var{lang}.html} file. @xref{generic.LANG.html}.
-
address@hidden -o
address@hidden address@hidden
-The file where to write the output of the script.
-
address@hidden -t
address@hidden address@hidden
-The file containing the translation links. This makes sense only for
-articles, since the homepage has its own @file{translations.include}
-which gets included via an @acronym{SSI} directive.
address@hidden FIXME: This should be improved, it is not clear.
-
address@hidden --version
-Print copyright and version information on the standard output.
-
address@hidden --help
-Print usage information on stdout.
address@hidden table
-
address@hidden validate-html
address@hidden The @command{validate-html} Script
-
-This is a Bash script whose purpose is to ``validate'' both the
-original and translated articles to make sure that they conform to the
-respective @acronym{W3C} standard. Sometimes webmasters make
-mistakes, and translators too, so this tool is useful to catch errors
-of that kind.
-
address@hidden enforces XHTML validation at build time if invoked with
address@hidden
-
-The script expects only one @var{file} as an argument and will exit
-with an error if it is not specified (which might be the case when an
-automatic variable is not expanded properly due to a bug in the
-makefile).
-
address@hidden Rules
address@hidden How The Recipes Work
-
-Read the source for now.
-
address@hidden Copying This Manual
address@hidden GNU Free Documentation License
-
address@hidden fdl.texi
-
address@hidden Index
address@hidden Index
-
address@hidden cp
-
address@hidden
-
-Local Variables:
-eval: (add-hook 'write-file-hooks 'time-stamp)
-time-stamp-start: "@set lastupdate "
-time-stamp-end: "$"
-time-stamp-format: "%02d.%02m.%:y"
-compile-command: "texi2pdf -c gnun.texi"
-ispell-local-dictionary: "american"
-End:
Index: prep/gnun/make-prototype
===================================================================
RCS file: prep/gnun/make-prototype
diff -N prep/gnun/make-prototype
--- prep/gnun/make-prototype 19 Feb 2008 07:02:05 -0000 1.7
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,181 +0,0 @@
-#!/usr/bin/guile \
--e main --debug -s
-!#
-
-;; Copyright (C) 2007, 2008 Free Software Foundation, Inc.
-
-;; This file is part of GNUnited Nations.
-
-;; GNUnited Nations is free software: you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License as
-;; published by the Free Software Foundation, either version 3 of the
-;; License, or (at your option) any later version.
-
-;; GNUnited Nations is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNUnited Nations. If not, see
-;; <http://www.gnu.org/licenses/>.
-
-(define version-message
- (string-append
- "make-prototype (GNUnited Nations) 0.1\n"
- "Copyright (C) 2008 Free Software Foundation, Inc.\n"
- "You may redistribute copies of GNUnited Nations\n"
- "under the terms of the GNU General Public License.\n"
- "For more information about these matters, see the file named COPYING.\n"))
-
-(define help-message
- (string-append
- "Usage: make-prototype OPTION...\n"
- "\n"
- "Input format specification:\n"
- " --article Process input file as an article (default)\n"
- " --home Process input file as a home page\n"
- "\n"
- "Input specification:\n"
- " -i, --input=FILE Input file (article or home page)\n"
- " -g, --generic=FILE Generic notes for a language team\n"
- "\n"
- "Output options:\n"
- " -o, --output=FILE Output prototype\n"
- " -t, --translinks=FILE Translations links (meaningful for articles
only)\n"
- "\n"
- " --version Just print version info and return\n"
- " --help Print this usage information message\n"
- "\n"
- "Report bugs to address@hidden"))
-
-(define option-grammar
- '((article (value #f))
- (home (value #f))
- (input (single-char #\i) (value #t))
- (generic (single-char #\g) (value #t))
- (output (single-char #\o) (value #t))
- (translinks (single-char #\t) (value #t))
- (version (value #f))
- (help (value #f))))
-
-(define article-page-regexp
- "^(.*)(<title>.*)(</div>.*<div id=\"footer\">.*)(<p>.*?[$]Date:.*)(<ul
class=\"translations-list\">.*</ul>)(.*)$")
-
-(define home-page-regexp
- "^(.*?)(<title>.*)(</div>.*<div id=\"footer\">.*)(<p>.*?[$]Date:.*)$")
-
-(define skip-tag
- "gnun")
-
-(define slot-translators-notes
- (string-append
- "\n"
- "<div style=\"font-size: small;\">\n"
- "<!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.-->\n"
- "*GNUN-SLOT: TRANSLATOR'S NOTES*</div>\n"))
-
-(define slot-translators-credits
- (string-append
- "\n"
- "<div class=\"translators-credits\">\n"
- "<!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->\n"
- "*GNUN-SLOT: TRANSLATOR'S CREDITS*</div>\n"))
-
-(define autogenerated-warning
- "This file is automatically generated by GNUnited Nations!")
-
-(define <skip-tag>
- (string-append "<" skip-tag ">"))
-
-(define </skip-tag>
- (string-append "</" skip-tag ">"))
-
-(define <autogenerated-warning>
- (string-append
- <skip-tag> </skip-tag> "<!-- " autogenerated-warning " -->" "\n"))
-
-
-(use-modules (ice-9 regex)
- (ice-9 rdelim)
- (ice-9 getopt-long))
-
-(define (main args)
- (let* ((options (catch 'misc-error
- (lambda () (getopt-long args option-grammar))
- (lambda (key subr message args data)
- (die (apply format #f message args)))))
- (opt (lambda args (apply option-ref options args))))
- (cond ((opt 'version #f) (version))
- ((opt 'help #f) (help))
- ((and (opt 'article #f)
- (opt 'home #f))
- (die "conflicting options: `--article' and `--home'"))
- ((not (opt 'input #f))
- (die "no input file"))
- ((not (opt 'generic #f))
- (die "no generic file"))
- ((not (opt 'output #f))
- (die "no output file"))
- ((opt 'home #f)
- (and (opt 'translinks #f)
- (die "`--translinks' makes no sense for home pages"))
- (make-home (opt 'input #f)
- (opt 'generic #f)
- (opt 'output #f)))
- ((opt 'article #t)
- (or (opt 'translinks #f)
- (die "no translinks file"))
- (make-article (opt 'input #f)
- (opt 'generic #f)
- (opt 'output #f)
- (opt 'translinks #f))))))
-
-(define (die message)
- (display "make-prototype: " (current-error-port))
- (display message (current-error-port))
- (newline (current-error-port))
- (exit 2))
-
-(define (version)
- (display version-message))
-
-(define (help)
- (display help-message))
-
-(define (make-article input generic output translinks)
- (with-input-from-file input
- (lambda ()
- (let ((m (string-match article-page-regexp (read-delimited ""))))
- (with-output-to-file output
- (lambda ()
- (display
- (string-append (match:substring m 1)
- <autogenerated-warning>
- (match:substring m 2)
- slot-translators-notes
- (match:substring m 3)
- slot-translators-credits
- "<" skip-tag ">include(`" generic "')</" skip-tag
"> "
- (match:substring m 4)
- "<" skip-tag ">include(`" translinks "')</"
skip-tag ">"
- (match:substring m 6)))))
- (with-output-to-file translinks
- (lambda ()
- (display (match:substring m 5))))))))
-
-(define (make-home input generic output)
- (with-input-from-file input
- (lambda ()
- (let ((m (string-match home-page-regexp (read-delimited ""))))
- (with-output-to-file output
- (lambda ()
- (display
- (string-append (match:substring m 1)
- <autogenerated-warning>
- (match:substring m 2)
- slot-translators-notes
- (match:substring m 3)
- slot-translators-credits
- "<" skip-tag ">include(`" generic "')</" skip-tag
"> "
- (match:substring m 4)))))))))
Index: prep/gnun/validate-html
===================================================================
RCS file: prep/gnun/validate-html
diff -N prep/gnun/validate-html
--- prep/gnun/validate-html 8 Feb 2008 17:32:27 -0000 1.6
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,63 +0,0 @@
-#!/bin/bash
-
-# Copyright (C) 2008 Free Software Foundation, Inc.
-
-# This file is part of GNUnited Nations.
-
-# GNUnited Nations is free software: you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-
-# GNUnited Nations is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with GNUnited Nations. If not, see <http://www.gnu.org/licenses/>.
-
-set -e
-set -o pipefail
-
-if [ $# -ne 1 ]; then
- echo 1>&2 Error: The script requires a FILE as argument.
- exit 1
-fi
-
-ROOT=`dirname $0`/../..
-USERDTD=$HOME/dtd
-
-# Create two tempfiles and mark them for deletion on exit.
-TMP1=`mktemp -t gnun.1.XXXXXX`
-TMP2=`mktemp -t gnun.2.XXXXXX`
-trap "rm -f $TMP1 $TMP2" EXIT
-
-# Expand input file's #include directives and save the result in
-# $TMP1.
-cat $1 | sed "s/<\!--#include virtual=\"\/\?\(.*\)\" -->/include(\`\1')/g" \
- | m4 -EE -I $ROOT > $TMP1
-
-# Execute xmllint on $TMP1 and save it's output to $TMP2.
-set +o pipefail
-set +e
-cat $TMP1 | xmllint --path "$USERDTD" --loaddtd --nonet --noout - 2> $TMP2
-LINTSTATUS=$?
-set -e
-set -o pipefail
-
-# Parse xmllint's error output (if any) and print it by inserting
-# additional context line after every occurrence of "line X" where X
-# is a decimal number. It is helpful to show the contents of those
-# mentioned lines, since xmllint runs on intermediate input file (with
-# expanded #include directives) and the translator can not easily look
-# up for references in it.
-cat $TMP2 | sed '
- /line [[:digit:]]\+/ {
- p
- s=^.*line \([[:digit:]]\+\).*$=head -n \1 '"$TMP1"' | tail -n 1=
- e
- }'
-
-# Exit with xmlint's original exit status.
-exit $LINTSTATUS
- trans-coord/gnun server/gnun/ChangeLog server/g...,
Yavor Doganov <=