diff mbox series

[v2,8/9] Makefile: add "po-init" rule to initialize po/XX.po

Message ID 20220519081548.3380-9-worldhello.net@gmail.com (mailing list archive)
State New, archived
Headers show
Series None | expand

Commit Message

Jiang Xin May 19, 2022, 8:15 a.m. UTC
From: Ævar Arnfjörð Bjarmason <avarab@gmail.com>

The core translation is the minimum set of work that must be done for a
new language translation.

There are over 5000 messages in the template message file "po/git.pot"
that need to be translated. It is not a piece of cake for such a huge
workload. So we used to define a small set of messages called "core
translation" that a new l10n contributor must complete before sending
pull request to the l10n coordinator.

By pulling in some parts of the git-po-helper[^1] logic, we add rule
"core-pot" to create this core translation message "po/git-core.pot":

    make core-pot

To help new l10n contributors to initialized their "po/XX.pot" from
"po/git-core.pot", we also add new rules "po-init":

    make po-init POT_FILE=po/XX.po

[^1]: https://github.com/git-l10n/git-po-helper/

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Jiang Xin <zhiyou.jx@alibaba-inc.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 Makefile      | 44 ++++++++++++++++++++++++++++++++++++++++++++
 po/.gitignore |  1 +
 shared.mak    |  1 +
 3 files changed, 46 insertions(+)

Comments

Ævar Arnfjörð Bjarmason May 19, 2022, 10:22 a.m. UTC | #1
On Thu, May 19 2022, Jiang Xin wrote:

> From: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
>
> The core translation is the minimum set of work that must be done for a
> new language translation.
>
> There are over 5000 messages in the template message file "po/git.pot"
> that need to be translated. It is not a piece of cake for such a huge
> workload. So we used to define a small set of messages called "core
> translation" that a new l10n contributor must complete before sending
> pull request to the l10n coordinator.
>
> By pulling in some parts of the git-po-helper[^1] logic, we add rule
> "core-pot" to create this core translation message "po/git-core.pot":
>
>     make core-pot
>
> To help new l10n contributors to initialized their "po/XX.pot" from
> "po/git-core.pot", we also add new rules "po-init":
>
>     make po-init POT_FILE=po/XX.po

This is a typo, you mean PO_FILE, not POT_FILE.

>  Makefile      | 44 ++++++++++++++++++++++++++++++++++++++++++++
>  po/.gitignore |  1 +
>  shared.mak    |  1 +
>  3 files changed, 46 insertions(+)
>
> diff --git a/Makefile b/Makefile
> index edebd44d5c..0a687a6eb2 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -2801,6 +2801,7 @@ po-update: po/git.pot
>  	$(check_po_file_envvar)
>  	@if test ! -e $(PO_FILE); then \
>  		echo >&2 "error: $(PO_FILE) does not exist"; \
> +		echo >&2 'To create an initial po file, use: "make po-init PO_FILE=po/XX.po"'; \

Correct here.

>  		exit 1; \
>  	fi
>  	$(QUIET_MSGMERGE)$(MSGMERGE) $(MSGMERGE_FLAGS) $(PO_FILE) po/git.pot
> @@ -2808,6 +2809,49 @@ po-update: po/git.pot
>  .PHONY: check-pot
>  check-pot: $(LOCALIZED_ALL_GEN_PO)
>  
> +### TODO FIXME: Translating everything in these files is a bad
> +### heuristic for "core", as we'll translate obscure error() messages
> +### along with commonly seen i18n messages. A better heuristic would
> +### be to e.g. use spatch to first remove error/die/warning
> +### etc. messages.
> +LOCALIZED_C_CORE =
> +LOCALIZED_C_CORE += builtin/checkout.c
> +LOCALIZED_C_CORE += builtin/clone.c
> +LOCALIZED_C_CORE += builtin/index-pack.c
> +LOCALIZED_C_CORE += builtin/push.c
> +LOCALIZED_C_CORE += builtin/reset.c
> +LOCALIZED_C_CORE += remote.c
> +LOCALIZED_C_CORE += wt-status.c
> +
> +LOCALIZED_C_CORE_GEN_PO = $(LOCALIZED_C_CORE:%=.build/pot/po/%.po)
> +
> +.PHONY: core-pot
> +core-pot: po/git-core.pot
> +
> +.build/pot/git-core.header: $(LOCALIZED_C_CORE_GEN_PO)
> +	$(call mkdir_p_parent_template)
> +	$(QUIET_XGETTEXT)$(XGETTEXT) $(XGETTEXT_FLAGS_C) \
> +		-o - /dev/null | \
> +	sed -e 's|charset=CHARSET|charset=UTF-8|g' >$@ && \
> +	echo '"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\\n"' >>$@
> +

This looks OK to me, FWIW in the version I have on my branch I tried to
munge some of this a bit more. So the diff between my (-)/yours (+) is:
	
	--- po/fo.po    2022-05-19 12:23:02.548459230 +0200
	+++ po/fo.po.jx 2022-05-19 12:22:50.608563768 +0200
	@@ -1,19454 +1,1224 @@
	+# Faroese translations for Git package.
	+# Copyright (C) 2022 THE Git'S COPYRIGHT HOLDER
	 # This file is distributed under the same license as the Git package.
	+# Automatically generated, 2022.
	+#
	 msgid ""
	 msgstr ""
	 "Project-Id-Version: Git\n"
	-"Last-Translator: make by the Makefile\n"
	-"Language-Team: Git Mailing List <git@vger.kernel.org>\n"
	+"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
	+"POT-Creation-Date: 2022-05-19 12:22+0200\n"
	+"PO-Revision-Date: 2022-05-19 12:22+0200\n"
	+"Last-Translator: Automatically generated\n"
	+"Language-Team: none\n"
	 "Language: fo\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"
	-"PO-Revision-Date: 2022-04-11 11:05+0200\n"

So yours has the "Faroese translations for Git package" (good), but I
also omitted/corrected some of the headers. See 72ed0c8b2e6 (i18n:
migrate to line-number-less i18n workflow, 2022-04-03) in my fork.

This version is also fine, but just in case you wanted to steal
something from it...
diff mbox series

Patch

diff --git a/Makefile b/Makefile
index edebd44d5c..0a687a6eb2 100644
--- a/Makefile
+++ b/Makefile
@@ -2801,6 +2801,7 @@  po-update: po/git.pot
 	$(check_po_file_envvar)
 	@if test ! -e $(PO_FILE); then \
 		echo >&2 "error: $(PO_FILE) does not exist"; \
+		echo >&2 'To create an initial po file, use: "make po-init PO_FILE=po/XX.po"'; \
 		exit 1; \
 	fi
 	$(QUIET_MSGMERGE)$(MSGMERGE) $(MSGMERGE_FLAGS) $(PO_FILE) po/git.pot
@@ -2808,6 +2809,49 @@  po-update: po/git.pot
 .PHONY: check-pot
 check-pot: $(LOCALIZED_ALL_GEN_PO)
 
+### TODO FIXME: Translating everything in these files is a bad
+### heuristic for "core", as we'll translate obscure error() messages
+### along with commonly seen i18n messages. A better heuristic would
+### be to e.g. use spatch to first remove error/die/warning
+### etc. messages.
+LOCALIZED_C_CORE =
+LOCALIZED_C_CORE += builtin/checkout.c
+LOCALIZED_C_CORE += builtin/clone.c
+LOCALIZED_C_CORE += builtin/index-pack.c
+LOCALIZED_C_CORE += builtin/push.c
+LOCALIZED_C_CORE += builtin/reset.c
+LOCALIZED_C_CORE += remote.c
+LOCALIZED_C_CORE += wt-status.c
+
+LOCALIZED_C_CORE_GEN_PO = $(LOCALIZED_C_CORE:%=.build/pot/po/%.po)
+
+.PHONY: core-pot
+core-pot: po/git-core.pot
+
+.build/pot/git-core.header: $(LOCALIZED_C_CORE_GEN_PO)
+	$(call mkdir_p_parent_template)
+	$(QUIET_XGETTEXT)$(XGETTEXT) $(XGETTEXT_FLAGS_C) \
+		-o - /dev/null | \
+	sed -e 's|charset=CHARSET|charset=UTF-8|g' >$@ && \
+	echo '"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\\n"' >>$@
+
+po/git-core.pot: .build/pot/git-core.header $(LOCALIZED_C_CORE_GEN_PO)
+	$(QUIET_GEN)$(MSGCAT) $(MSGCAT_FLAGS) $^ >$@
+
+.PHONY: po-init
+po-init: po/git-core.pot
+	$(check_po_file_envvar)
+	@if test -e $(PO_FILE); then \
+		echo >&2 "error: $(PO_FILE) exists already"; \
+		exit 1; \
+	fi
+	$(QUIET_MSGINIT)msginit \
+		--input=$< \
+		--output=$(PO_FILE) \
+		--no-translator \
+		--locale=$(PO_FILE:po/%.po=%)
+
+## po/*.po files & their rules
 ifdef NO_GETTEXT
 POFILES :=
 MOFILES :=
diff --git a/po/.gitignore b/po/.gitignore
index 37d1301b32..ff0e5176a6 100644
--- a/po/.gitignore
+++ b/po/.gitignore
@@ -1,2 +1,3 @@ 
 /build
 /git.pot
+/git-core.pot
diff --git a/shared.mak b/shared.mak
index 8cd170a7e7..4330192e9c 100644
--- a/shared.mak
+++ b/shared.mak
@@ -62,6 +62,7 @@  ifndef V
 	QUIET_BUILT_IN = @echo '   ' BUILTIN $@;
 	QUIET_LNCP     = @echo '   ' LN/CP $@;
 	QUIET_XGETTEXT = @echo '   ' XGETTEXT $@;
+	QUIET_MSGINIT  = @echo '   ' MSGINIT $@;
 	QUIET_MSGFMT   = @echo '   ' MSGFMT $@;
 	QUIET_MSGMERGE = @echo '   ' MSGMERGE $@;
 	QUIET_GCOV     = @echo '   ' GCOV $@;