[katello-devel] How to format strings

Justin Sherrill jsherril at redhat.com
Fri Sep 21 13:13:25 UTC 2012


On 09/21/2012 03:42 AM, Lukas Zapletal wrote:
> On Fri, Sep 21, 2012 at 09:20:18AM +0200, Miroslav Suchy wrote:
>> In our code base we use very frequently:
>>
>> _("Couldn't find changeset '#{params[:changeset_id]}'")
>>
>> and later:
>>
>> _("Couldn't find changeset '#{params[:id]}'")
>>
>> But this notation means that the name of variable is part of string
>> to be translated. And that results in two strings, which needs to be
>> translated:
>>
>> msgid "\"Couldn't find changeset '#{params[:changeset_id]}'\""
>> msgstr ""
>>
>> msgid "\"Couldn't find changeset '#{params[:id]}'\""
>> msgstr ""
>>
>>
>> Please if you are writing string, which you are passing to gettext
>> function (aka _()), then user rather this notation:
>>
>> _("Couldn't find changeset '%s'") % params[:id]
>>
>> or
>>
>> _("Couldn't find changeset '%s' and '%s'") % [params[:id], foo]
>>
>> If we will follow this, we will significantly reduce number of
>> strings to be translated.
>>
>> Thank you.
>>
>> P.S. I'm preparing pull request, which will unify these duplicities.
>> I'm doing that in my spare time, so it will take some time.
>>
> There was a long discussion on the list in this regard and we have
> agreed we will stick with #{} but only for simple variables. We should
> avoid constructs like calling functions or hashes in this case.
>
>> _("Couldn't find changeset '#{simplevar}'")

I thought this syntax didn't work at all for translations?  i.e.   
"Couldn't find changeset '#{simplevar}'" would get marked for 
translation but at runtime  "Couldn't find changeset 'some changeset'" 
would get checked and would fail to find the translation?

-Justin
> Because this gives translators better flexibility when there are
> multiple substitutions. With %s they are not able to re-order those for
> some languages.
>
> I know there is a generic approach of numbering those, something like %1
> %2 but after short investigation we have found this is not possible for
> Ruby i18n libraries we use.
>
> I think the plan was to write a simple checker that would watch the
> codebase for invalid string interpolations. Correct me, if I am wrong.
>
> https://fedorahosted.org/katello/wiki/I18N
>




More information about the katello-devel mailing list