summaryrefslogtreecommitdiffstats
path: root/install/po
diff options
context:
space:
mode:
authorAdam Young <ayoung@redhat.com>2010-09-28 17:27:01 -0400
committerAdam Young <ayoung@redhat.com>2010-10-01 10:14:20 -0400
commit58f1026e34c3acbde5a307e499c568476301416b (patch)
tree5e319f384900251fc911774f386c408b943219cf /install/po
parentc106922c137d15f26d4085382e3d2418250949cb (diff)
downloadfreeipa-58f1026e34c3acbde5a307e499c568476301416b.tar.gz
freeipa-58f1026e34c3acbde5a307e499c568476301416b.tar.xz
freeipa-58f1026e34c3acbde5a307e499c568476301416b.zip
Corrected Language Codes The Gnu document incorrectly listed Japanese as jp and Hebrew as iw. That was why the Plurals line passed through directly from the template.
Diffstat (limited to 'install/po')
-rw-r--r--install/po/LINGUAS4
-rw-r--r--install/po/Makefile286
-rw-r--r--install/po/README3
-rw-r--r--install/po/he.po (renamed from install/po/jp.po)11
-rw-r--r--install/po/ja.po (renamed from install/po/iw.po)22
5 files changed, 303 insertions, 23 deletions
diff --git a/install/po/LINGUAS b/install/po/LINGUAS
index b2521fed9..09c721e65 100644
--- a/install/po/LINGUAS
+++ b/install/po/LINGUAS
@@ -3,9 +3,9 @@ de
es
fr
id
+he
it
-iw
-jp
+ja
kn
ko
pl
diff --git a/install/po/Makefile b/install/po/Makefile
new file mode 100644
index 000000000..13c455874
--- /dev/null
+++ b/install/po/Makefile
@@ -0,0 +1,286 @@
+prefix = /usr
+exec_prefix = ${prefix}
+datarootdir = ${prefix}/share
+datadir = ${datarootdir}
+localedir = ${datarootdir}/locale
+
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = /usr/bin/install -c -m 644
+AWK = gawk
+SED = /bin/sed
+MKDIR_P = /bin/mkdir -p
+XGETTEXT = /usr/bin/xgettext
+MSGFMT = /usr/bin/msgfmt
+MSGINIT = /usr/bin/msginit
+MSGMERGE = /usr/bin/msgmerge
+MSGCMP = /usr/bin/msgcmp
+
+DOMAIN = ipa
+MSGMERGE_UPDATE = $(MSGMERGE) --update
+
+COPYRIGHT_HOLDER = Red Hat
+PACKAGE_NAME = $(DOMAIN)
+PACKAGE_BUGREPORT = https://hosted.fedoraproject.org/projects/freeipa/newticket
+XGETTEXT_OPTIONS = \
+--add-comments="TRANSLATORS:" \
+--copyright-holder="$(COPYRIGHT_HOLDER)" \
+--package-name="$(PACKAGE_NAME)" \
+--msgid-bugs-address="$(PACKAGE_BUGREPORT)"
+
+languages = $(shell $(SED) 's/\#.*//' LINGUAS) # The sed command removes comments
+po_files = $(patsubst %, %.po, $(languages))
+mo_files = $(patsubst %.po, %.mo, $(po_files))
+po_count=$(words $(po_files))
+
+PYTHON_POTFILES = \
+ ../../ipa \
+ ../../lite-server.py \
+ ../../ipapython/config.py \
+ ../../ipapython/sysrestore.py \
+ ../../ipapython/__init__.py \
+ ../../ipapython/ipautil.py \
+ ../../ipapython/certdb.py \
+ ../../ipapython/ipavalidate.py \
+ ../../ipapython/dnsclient.py \
+ ../../ipapython/dogtag.py \
+ ../../ipapython/nsslib.py \
+ ../../ipapython/entity.py \
+ ../../install/tools/ipa-replica-manage \
+ ../../install/tools/ipa-server-certinstall \
+ ../../install/tools/ipa-replica-install \
+ ../../install/tools/ipa-nis-manage \
+ ../../install/tools/ipa-upgradeconfig \
+ ../../install/tools/ipa-replica-prepare \
+ ../../install/tools/ipa-compat-manage \
+ ../../install/tools/ipa-server-install \
+ ../../install/tools/ipa-ldap-updater \
+ ../../install/migration/migration.py \
+ ../../ipalib/config.py \
+ ../../ipalib/parameters.py \
+ ../../ipalib/request.py \
+ ../../ipalib/output.py \
+ ../../ipalib/__init__.py \
+ ../../ipalib/backend.py \
+ ../../ipalib/pkcs10.py \
+ ../../ipalib/x509.py \
+ ../../ipalib/plugable.py \
+ ../../ipalib/constants.py \
+ ../../ipalib/aci.py \
+ ../../ipalib/base.py \
+ ../../ipalib/ipauuid.py \
+ ../../ipalib/crud.py \
+ ../../ipalib/cli.py \
+ ../../ipalib/text.py \
+ ../../ipalib/compat.py \
+ ../../ipalib/frontend.py \
+ ../../ipalib/rpc.py \
+ ../../ipalib/errors.py \
+ ../../ipalib/encoder.py \
+ ../../ipalib/util.py \
+ ../../ipalib/plugins/config.py \
+ ../../ipalib/plugins/rolegroup.py \
+ ../../ipalib/plugins/host.py \
+ ../../ipalib/plugins/group.py \
+ ../../ipalib/plugins/migration.py \
+ ../../ipalib/plugins/xmlclient.py \
+ ../../ipalib/plugins/service.py \
+ ../../ipalib/plugins/passwd.py \
+ ../../ipalib/plugins/__init__.py \
+ ../../ipalib/plugins/virtual.py \
+ ../../ipalib/plugins/hbac.py \
+ ../../ipalib/plugins/cert.py \
+ ../../ipalib/plugins/baseldap.py \
+ ../../ipalib/plugins/aci.py \
+ ../../ipalib/plugins/kerberos.py \
+ ../../ipalib/plugins/krbtpolicy.py \
+ ../../ipalib/plugins/dns.py \
+ ../../ipalib/plugins/automount.py \
+ ../../ipalib/plugins/netgroup.py \
+ ../../ipalib/plugins/misc.py \
+ ../../ipalib/plugins/user.py \
+ ../../ipalib/plugins/taskgroup.py \
+ ../../ipalib/plugins/hostgroup.py \
+ ../../ipalib/plugins/pwpolicy.py \
+ ../../ipalib/plugins/internal.py \
+ ../../ipaserver/__init__.py \
+ ../../ipaserver/servercore.py \
+ ../../ipaserver/ipautil.py \
+ ../../ipaserver/rpcserver.py \
+ ../../ipaserver/conn.py \
+ ../../ipaserver/ipaldap.py \
+ ../../ipaserver/install/installutils.py \
+ ../../ipaserver/install/service.py \
+ ../../ipaserver/install/ldapupdate.py \
+ ../../ipaserver/install/__init__.py \
+ ../../ipaserver/install/cainstance.py \
+ ../../ipaserver/install/ntpinstance.py \
+ ../../ipaserver/install/bindinstance.py \
+ ../../ipaserver/install/krbinstance.py \
+ ../../ipaserver/install/certs.py \
+ ../../ipaserver/install/dsinstance.py \
+ ../../ipaserver/install/replication.py \
+ ../../ipaserver/install/httpinstance.py \
+ ../../ipaserver/plugins/ldap2.py \
+ ../../ipaserver/plugins/rabase.py \
+ ../../ipaserver/plugins/selfsign.py \
+ ../../ipaserver/plugins/__init__.py \
+ ../../ipaserver/plugins/join.py \
+ ../../ipaserver/plugins/ldapapi.py \
+ ../../ipaserver/plugins/xmlserver.py \
+ ../../ipaserver/plugins/dogtag.py \
+ ../../contrib/RHEL4/ipachangeconf.py \
+ ../../ipa-client/ipaclient/ntpconf.py \
+ ../../ipa-client/ipaclient/__init__.py \
+ ../../ipa-client/ipaclient/ipachangeconf.py \
+ ../../ipa-client/ipaclient/ipadiscovery.py \
+ ../../ipa-client/ipa-install/ipa-client-install
+
+C_POTFILES = \
+ ../../daemons/ipa-kpasswd/ipa_kpasswd.c \
+ ../../daemons/ipa-slapi-plugins/ipa-enrollment/ipa_enrollment.c \
+ ../../daemons/ipa-slapi-plugins/ipa-memberof/ipa-memberof.c \
+ ../../daemons/ipa-slapi-plugins/ipa-memberof/ipa-memberof.h \
+ ../../daemons/ipa-slapi-plugins/ipa-memberof/ipa-memberof_config.c \
+ ../../daemons/ipa-slapi-plugins/ipa-pwd-extop/ipa_pwd_extop.c \
+ ../../daemons/ipa-slapi-plugins/ipa-winsync/ipa-winsync-config.c \
+ ../../daemons/ipa-slapi-plugins/ipa-winsync/ipa-winsync.c \
+ ../../daemons/ipa-slapi-plugins/ipa-winsync/ipa-winsync.h \
+ ../../ipa-client/config.c \
+ ../../ipa-client/ipa-getkeytab.c \
+ ../../ipa-client/ipa-join.c \
+ ../../ipa-client/ipa-rmkeytab.c
+
+POTFILES = $(PYTHON_POTFILES) $(C_POTFILES)
+
+.SUFFIXES:
+.SUFFIXES: .po .mo
+.PHONY: all create-po update-po update-pot install mostlyclean clean distclean test_lang test mo-files
+
+all:
+
+SUFFIXES = .po .mo
+
+.po.mo:
+ @echo Creating $@; \
+ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
+
+$(po_files): $(DOMAIN).pot
+ @if [ ! -f $@ ]; then \
+ lang=`echo $@ | $(SED) -r -e 's/\.po$$//'` # Strip .po suffix ; \
+ echo Creating nonexistent $@, you should add this file to your SCM repository; \
+ $(MSGINIT) --locale $$lang --no-translator -i $(DOMAIN).pot -o $@; \
+ fi; \
+ $(MSGMERGE) $@ -o $@ $(DOMAIN).pot
+
+create-po: $(DOMAIN).pot
+ @for po_file in $(po_files); do \
+ if [ ! -e $$po_file ]; then \
+ lang=`echo $$po_file | $(SED) -r -e 's/\.po$$//'` # Strip .po suffix ; \
+ echo Creating nonexistent $$po_file, you should add this file to your SCM repository; \
+ $(MSGINIT) --locale $$lang --no-translator -i $(DOMAIN).pot -o $$po_file; \
+ fi; \
+ done
+
+update-po: update-pot
+ $(MAKE) all
+
+update-pot:
+ @rm -f $(DOMAIN).pot.update
+ @$(XGETTEXT) $(XGETTEXT_OPTIONS) \
+ --output $(DOMAIN).pot.update \
+ --language="python" \
+ $(PYTHON_POTFILES) \
+ && \
+ $(XGETTEXT) $(XGETTEXT_OPTIONS) \
+ --output $(DOMAIN).pot.update \
+ --join-existing \
+ --language="c" \
+ $(C_POTFILES) ; \
+ $(SED) '/^"POT-Creation-Date: .*"$$/d' $(DOMAIN).pot.update > $(DOMAIN).pot.update.tmp ; \
+ $(SED) -i -r -e 's%("Content-Type: text/plain; charset=)(.*)(\\n")%\1UTF-8\3%' $(DOMAIN).pot.update.tmp ; \
+ $(SED) '/^"POT-Creation-Date: .*"$$/d' $(DOMAIN).pot > $(DOMAIN).pot.tmp ; \
+ if ! cmp -s $(DOMAIN).pot.update.tmp $(DOMAIN).pot.tmp ; then \
+ echo "$(DOMAIN).pot updated" ; \
+ mv $(DOMAIN).pot.update $(DOMAIN).pot ; \
+ # Replace the charset with UTF-8 ; \
+ $(SED) -i -r -e 's%("Content-Type: text/plain; charset=)(.*)(\\n")%\1UTF-8\3%' $(DOMAIN).pot ; \
+ else \
+ echo "$(DOMAIN).pot unmodified" ; \
+ fi || :
+ @rm -f $(DOMAIN).pot.update $(DOMAIN).pot.update.tmp $(DOMAIN).pot.tmp
+
+msg-stats:
+ @pot_count=`$(MSGFMT) --statistics $(DOMAIN).pot 2>&1 | \
+ $(AWK) '{match($$0, /([0-9]+) translated messages, ([0-9]+) untranslated messages/, groups); \
+ printf "%s\n", groups[2];}'` ; \
+ echo "$(DOMAIN).pot has $$pot_count messages. There are $(po_count) po translation files." ; \
+ for po_file in $(po_files); do \
+ $(MSGCMP) $$po_file $(DOMAIN).pot 2>&1 | \
+ $(AWK) -v po_file=$$po_file -v pot_count=$$pot_count -v pot_file=$(DOMAIN).pot \
+ 'BEGIN {po_untranslated=0; undefined=0; \
+ po_name = gensub(/.po$$/, "", 1, po_file)} \
+ /this message is untranslated/ {po_untranslated++} \
+ /this message is used but not defined/ {undefined++} \
+ END {untranslated = po_untranslated+undefined; \
+ translated = pot_count - untranslated; \
+ ratio = sprintf("%d/%d", translated, pot_count); \
+ printf "%-7s %8s %5.1f%% %4d po untranslated, %4d missing, %4d untranslated\n", \
+ po_name ":", ratio, translated/pot_count*100.0, po_untranslated, undefined, untranslated;}'; \
+ done
+
+mo-files: $(mo_files)
+
+install: $(mo_files)
+ @for lang in $(languages); do \
+ dstdir=$(DESTDIR)$(localedir)/$$lang/LC_MESSAGES; \
+ $(MKDIR_P) $$dstdir; \
+ $(INSTALL) $$lang.mo $$dstdir/$(DOMAIN).mo; \
+ done
+
+mostlyclean:
+ rm -rf *.mo test.po test_locale
+ rm -f $(DOMAIN).pot.update $(DOMAIN).pot.update.tmp $(DOMAIN).pot.tmp
+
+clean: mostlyclean
+
+distclean: clean
+ rm -f Makefile
+
+maintainer-clean: distclean
+
+# We test our translations by taking the original untranslated string
+# (e.g. msgid) and prepend a prefix character and then append a suffix
+# character. The test consists of asserting that the first character in the
+# translated string is the prefix, the last character in the translated string
+# is the suffix and the everything between the first and last character exactly
+# matches the original msgid.
+#
+# We use unicode characters not in the ascii character set for the prefix and
+# suffix to enhance the test. To make reading the translated string easier the
+# prefix is the unicode right pointing arrow and the suffix left pointing arrow,
+# thus the translated string looks like the original string enclosed in
+# arrows. In ASCII art the string "foo" would render as:
+# -->foo<--
+#
+# Unicode right pointing arrow: u'\u2192', utf-8 = '\xe2\x86\x92'
+# Unicode left pointing arrow: u'\u2190', utf-8 = '\xe2\x86\x90'
+#
+# The sed command below performs the prefix and suffix substitution.
+#
+# When msginit is invoked with an English target locale it copies the msgid
+# into the msgstr. This is an undocumented feature of msginit. Otherwise the
+# msgstr will be set to the empty string (i.e. untranslated). We depend on
+# the msgid being copied to the msgstr.
+
+test_lang:
+ rm -rf test.po test_locale
+ $(MSGINIT) --no-translator -i $(DOMAIN).pot -l en_US -o test.po
+ $(SED) -i -r -e 's/^msgstr[ \t]+"(.*)"[ \t]*$$/msgstr "\xe2\x86\x92\1\xe2\x86\x90"/' test.po
+ $(MKDIR_P) test_locale/en_US/LC_MESSAGES
+ $(MSGFMT) -o test_locale/en_US/LC_MESSAGES/ipa.mo test.po
+
+test: test_lang
+ ./test_i18n.py
+
+maintainer-clean:
+
diff --git a/install/po/README b/install/po/README
index b9344b95a..b332d5cb4 100644
--- a/install/po/README
+++ b/install/po/README
@@ -22,6 +22,9 @@ A: Edit the LINGUAS file and add the new language. Then run "make create-po".
yet. Be sure to add the new .po file(s) to the source code repository. For
certain languages, you may have to edit the Plurals line. See:
http://www.gnu.org/software/hello/manual/gettext/Plural-forms.html
+ However, if this line is wrong, it is often an indicator that the locale
+ value is incorrect. For example, using 'jp' for Japanese in stead of 'ja'
+ will result in an invailid Plural's line.
Q: What files must be under source code control?
diff --git a/install/po/jp.po b/install/po/he.po
index 0c3dac0b8..605b33281 100644
--- a/install/po/jp.po
+++ b/install/po/he.po
@@ -1,4 +1,4 @@
-# Language jp translations for ipa package.
+# Hebrew translations for ipa package.
# Copyright (C) 2010 Red Hat
# This file is distributed under the same license as the ipa package.
# Automatically generated, 2010.
@@ -6,16 +6,17 @@
msgid ""
msgstr ""
"Project-Id-Version: ipa\n"
-"Report-Msgid-Bugs-To: https://hosted.fedoraproject.org/projects/freeipa/newticket\n"
+"Report-Msgid-Bugs-To: https://hosted.fedoraproject.org/projects/freeipa/"
+"newticket\n"
"POT-Creation-Date: 2010-09-27 10:25-0400\n"
-"PO-Revision-Date: 2010-09-27 10:23-0400\n"
+"PO-Revision-Date: 2010-09-27 10:25-0400\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
-"Language: jp\n"
+"Language: he\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../../ipalib/parameters.py:295
msgid "incorrect type"
diff --git a/install/po/iw.po b/install/po/ja.po
index 504194b9b..d445337fb 100644
--- a/install/po/iw.po
+++ b/install/po/ja.po
@@ -1,4 +1,4 @@
-# Language iw translations for ipa package.
+# Japanese translations for ipa package.
# Copyright (C) 2010 Red Hat
# This file is distributed under the same license as the ipa package.
# Automatically generated, 2010.
@@ -6,17 +6,17 @@
msgid ""
msgstr ""
"Project-Id-Version: ipa\n"
-"Report-Msgid-Bugs-To: https://hosted.fedoraproject.org/projects/freeipa/newticket\n"
+"Report-Msgid-Bugs-To: https://hosted.fedoraproject.org/projects/freeipa/"
+"newticket\n"
"POT-Creation-Date: 2010-09-27 10:25-0400\n"
-"PO-Revision-Date: 2010-09-27 10:23-0400\n"
+"PO-Revision-Date: 2010-09-27 10:25-0400\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
-"Language: iw\n"
+"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-
+"Plural-Forms: nplurals=1; plural=0;\n"
#: ../../ipalib/parameters.py:295
msgid "incorrect type"
@@ -235,7 +235,6 @@ msgstr ""
msgid "command %(name)r takes at most %(count)d argument"
msgid_plural "command %(name)r takes at most %(count)d arguments"
msgstr[0] ""
-msgstr[1] ""
#: ../../ipalib/errors.py:674
#, python-format
@@ -517,7 +516,6 @@ msgstr ""
msgid "%(count)d rolegroup matched"
msgid_plural "%(count)d rolegroups matched"
msgstr[0] ""
-msgstr[1] ""
#: ../../ipalib/plugins/host.py:86
msgid "Fully-qualified hostname required"
@@ -632,7 +630,6 @@ msgstr ""
msgid "%(count)d host matched"
msgid_plural "%(count)d hosts matched"
msgstr[0] ""
-msgstr[1] ""
#: ../../ipalib/plugins/host.py:337 ../../ipalib/plugins/service.py:83
msgid "Keytab"
@@ -695,7 +692,6 @@ msgstr ""
msgid "%(count)d group matched"
msgid_plural "%(count)d groups matched"
msgstr[0] ""
-msgstr[1] ""
#: ../../ipalib/plugins/group.py:254
#, python-format
@@ -831,7 +827,6 @@ msgstr ""
msgid "%(count)d service matched"
msgid_plural "%(count)d services matched"
msgstr[0] ""
-msgstr[1] ""
#: ../../ipalib/plugins/service.py:396
msgid "Service principal has no kerberos key"
@@ -1207,7 +1202,6 @@ msgstr ""
msgid "%(count)d ACI matched"
msgid_plural "%(count)d ACIs matched"
msgstr[0] ""
-msgstr[1] ""
#: ../../ipalib/plugins/krbtpolicy.py:63
msgid "Manage ticket policy for specific user"
@@ -1437,7 +1431,6 @@ msgstr ""
msgid "%(count)d plugin loaded"
msgid_plural "%(count)d plugins loaded"
msgstr[0] ""
-msgstr[1] ""
#: ../../ipalib/plugins/misc.py:116
msgid "Number of plugins loaded"
@@ -1535,7 +1528,6 @@ msgstr ""
msgid "%(count)d user matched"
msgid_plural "%(count)d users matched"
msgstr[0] ""
-msgstr[1] ""
#: ../../ipalib/plugins/user.py:278
#, python-format
@@ -1583,7 +1575,6 @@ msgstr ""
msgid "%(count)d taskgroup matched"
msgid_plural "%(count)d taskgroups matched"
msgstr[0] ""
-msgstr[1] ""
#: ../../ipalib/plugins/hostgroup.py:74
msgid "Host-group"
@@ -1625,7 +1616,6 @@ msgstr ""
msgid "%(count)d hostgroup matched"
msgid_plural "%(count)d hostgroups matched"
msgstr[0] ""
-msgstr[1] ""
#: ../../ipalib/plugins/pwpolicy.py:84
#, python-format