Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refs #37833 - Fix file timestamp handling when pulling translations #10326

Merged
merged 1 commit into from
Sep 18, 2024

Conversation

ekohl
Copy link
Member

@ekohl ekohl commented Sep 17, 2024

The Ruby gettext library wants the .po.time_stamp file to be at least as new as the .po file. If it doesn't exist or is older, it will remove the .edit.po file and then copy the .po file to .edit.po.

A more concrete example what ends up happening:

make -C locale tx-pull # updates $domain.edit.po

# This all assumes $domain.po exists
if [ ! -f $domain.po.time_stamp ] -o [ $domain.po -nt $domain.po.time_stamp ] ; then
    rm -f $domain.edit.po
fi
if [ ! -f $domain.edit.po ] ; then
    cp $domain.po $domain.edit.po

    # Merge in the new messages from the template
    msgmerge --update --sort-by-file --no-wrap $domain.edit.po $domain.pot
    if [ -f $domain.po ] -a [ $domain.po -nt $domain.edit.po ] ; then
        msgmerge --output $domain.edit.po --sort-by-file --no-wrap --no-obsolete-entries $domain.po $domain.edit.po
    fi
fi

This ensures that $domain.po.time_stamp is always the same mtime as $domain.po which prevents the gettext library from removing the updated $domain.edit.po file.

It means there is no message merging and we rely on Transifex for doing that part for us.

The Ruby gettext library wants the .po.time_stamp file to be at least as
new as the .po file. If it doesn't exist or is older, it will remove the
.edit.po file and then copy the .po file to .edit.po. In practice the
Makefile doesn't guarantee this, causing translations to be ignored.

A more concrete example what ends up happening:

    make -C locale tx-pull # updates $domain.edit.po

    # This all assumes $domain.po exists
    if [ ! -f $domain.po.time_stamp ] -o [ $domain.po -nt $domain.po.time_stamp ] ; then
        rm -f $domain.edit.po
    fi
    if [ ! -f $domain.edit.po ] ; then
        cp $domain.po $domain.edit.po

        # Merge in the new messages from the template
        msgmerge --update --sort-by-file --no-wrap $domain.edit.po $domain.pot
        if [ -f $domain.po ] -a [ $domain.po -nt $domain.edit.po ] ; then
            msgmerge --output $domain.edit.po --sort-by-file --no-wrap --no-obsolete-entries $domain.po $domain.edit.po
        fi
    fi

This ensures that $domain.po.time_stamp is always the same mtime as
$domain.po which prevents the gettext library from removing the updated
$domain.edit.po file.

It means there is no message merging and we rely on Transifex for doing
that part for us.
@ekohl ekohl merged commit 4ecace2 into theforeman:develop Sep 18, 2024
49 of 52 checks passed
@ekohl ekohl deleted the 37833-correct-locale-pulling branch September 18, 2024 13:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants