Re: [PATCH v3 1/5] l10n: add .gitattributes to simplify location filtering
- From
Jiang Xin <worldhello.net@gmail.com>
- Date
- Mar 16, 2026, 03:21 UTC
- Message-ID
- <CANYiYbEiDi3-MputSiHi0RZJa+BUe_6viT9HTVz+aJiSwCiw7g@mail.gmail.com>
- In-Reply-To
- <87220e93-8159-4a92-9c3f-b3f9fa34ba4e@kdbg.org>
On Sun, Mar 15, 2026 at 7:13 PM Johannes Sixt <j6t@kdbg.org> wrote:
Show 38 quoted lines
> > Am 14.03.26 um 15:38 schrieb Jiang Xin: > > +# Two filter types are used: > > +# 1. gettext-no-file-no-location: Strips both filenames and line numbers > > +# (e.g., removes "#: main.c:123" entirely) > > +# 2. gettext-no-location: Preserves filenames but removes line numbers, which > > +# requires gettext 0.20 or higher > > +# (e.g., "#: main.c:123" becomes "#: main.c") > > +# > > +# See `po/README.md` for instructions on setting up the required filter drivers. > > + > > +# Do not apply these filters to all `*.po` files via a wildcard. For legacy, > > +# unmaintained PO files, that would cause discrepancies between the filtered > > +# blob in the index and the unfiltered file in the working tree. > > + > > +# Languages that strip both filenames and line numbers > > +bg.po filter=gettext-no-file-no-location > > +de.po filter=gettext-no-file-no-location > > +#es.po filter=gettext-no-file-no-location > > +fr.po filter=gettext-no-file-no-location > > +#ga.po filter=gettext-no-file-no-location > > +#ru.po filter=gettext-no-file-no-location > > +sv.po filter=gettext-no-file-no-location > > +tr.po filter=gettext-no-file-no-location > > +uk.po filter=gettext-no-file-no-location > > +vi.po filter=gettext-no-file-no-location > > + > > +# Languages that preserve filenames but strip line numbers > > +#ca.po filter=gettext-no-location > > +id.po filter=gettext-no-location > > +zh_CN.po filter=gettext-no-location > > +zh_TW.po filter=gettext-no-location > > How settled is the use of these two different filters (and names) in the > community of translators? I am asking because I'm about to align the > translation workflow in the Gitk repository with that in the Git > repository. I need to know which of the two variants of filter names I > should ask translators to use.
This is a very good question, and it reminds me to revisit the names of these two filters.
When storing PO files in the repository, filtering location comments is necessary, because it reduces the storage growth caused by frequent changes in location comments, and also reduces the “diff churn” in commits caused by location changes.
Either removing the entire location lines (filenames + line numbers) or removing only the line numbers can solve the two problems above. Both also improve blob compression equally well, so there is no difference in terms of repository storage savings. Therefore, maintainers may choose either approach according to their own preference. As long as they do not switch back and forth between the two frequently, there is no impact. Recording the maintainer’s choice in the repository through .gitattributes can avoid l10n teams repeatedly changing their choices.
For the gitk project, there is only one source file, so removing line numbers while keeping the filename brings no benefit; removing the entire location is the best choice. However, for the Git project, some l10n teams keep filenames in PO files while removing line numbers, and this can still be somewhat helpful for locating the correspondence between PO entries and the source code when the PO files have not been regenerated from the POT file.
This also reminds me to rethink the naming of the following filters. Judging from the msgcat --no-location option, “location” refers to filename + line number, so defining the filters like this may be more appropriate:
```shell
git config --global filter.gettext-no-location.clean \
"msgcat --no-location -"git config --global filter.gettext-no-line-number.clean \
"msgcat --add-location=file -"
```Please let me know your thoughts, and I will make the corresponding changes in reroll v4.
-- Jiang Xin