> On Jan. 23, 2011, 4:56 p.m., Chusslove Illich wrote: > > /home/kde-devel/kdesvn/trunk/KDE/kdesdk/scripts/grantlee_strings_extractor.py, > > line 107 > > <http://svn.reviewboard.kde.org/r/6405/diff/2/?file=44441#file44441line107> > > > > What is the difference between _() and i18n()? The example shows one to > > be ordinary text and the other having a placeholder, but they should be > > synonyms. > > > > Since _() is native Gettext convention, other synonyms in the same vein > > would be p_() for i18nc(), n_() for i18np(), and pn_() for i18ncp(). > > > > (Just to be sure, are translations fetched later really through KDE > > i18n calls? Only then should calls have i18n*() names.) > > > > Stephen Kelly wrote: > Well, there is no i18n() function in the template system. The _() syntax > is not really a function call, but just a syntactic marker indicating that > the string should be extracted and run through the translation system. The > _() syntax can also not take any arguments, so it is always ordinary text and > can't handle placeholders. This is similar in semantics to how the django > template system works. > > {{ _("translatable string") }} > > is a shortcut for the 'template tag' > > {% i18n "translatable string" %} > > Not the use of {{ }} in one case and {% %} in the other. These are the > two types of parsable tokens in the syntax. {{ }} is simple value > substitution and {% %} can be anything, like value substitution in the i18n > case, or more complexity in the case of the 'if' tag: > > {% if something %}It's true{% else %}It's false{% endif %} > > Arguments to tags are separated by whitespace, so as you noticed we can > have > > {% i18n "The time is %1" the_time %} > > But we can't do the same with _(). > > Because _() is not a function call that can have arguments, the > additional syntaxes you proposed (which require arguments) don't really > belong. > > The translations are fetched later through the use of KLocalizedString > such as approximately: > > QString translateString(const QString &input, const QDateTime &arg) > { > KLocalizedString ls = ki18n(input.toLatin1()); > ls.subs(arg); > return ls.toString(d->usedLocale); > } > > And that is called with approximately: > > QDateTime now = getNow(); > QString result = translateString("The time is %1", now); > > I'm simplifying this of course for this example because I don't fully > understand the nature of your question. I'm not certain how this affects your > comment about whether the tag should be called i18n or not. > > I generated documentation for the development version and put it online. > It may clarify this stuff further: > > http://grantlee.org/apidox_i18n/i18n_l10n.html > > > Chusslove Illich wrote: > Your explanation answers my question perfectly. The distinction between > {{ }} and {% %} slipped my mind; and _() and i18n are indeed synonyms under > the hood (both using KLocalizedString, with proper parameter substitution as > required). Ignore my mention of p_, n_, np_. > > (A detail off topic: it should always be ki18n(someqstring.toUtf8()), in > order not to needlesly constrain the original text.)
Thanks. I've fixed that in the example app too. So is that a ship it from you? - Stephen ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: http://svn.reviewboard.kde.org/r/6405/#review9687 ----------------------------------------------------------- On Jan. 23, 2011, 8:01 p.m., Stephen Kelly wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > http://svn.reviewboard.kde.org/r/6405/ > ----------------------------------------------------------- > > (Updated Jan. 23, 2011, 8:01 p.m.) > > > Review request for kdelibs, Pino Toscano and Chusslove Illich. > > > Summary > ------- > > The new scripts allow the kde i18n infrastructure to extract translatable > strings from Grantlee templates. > > An additional line is needed in the Messages.sh script > > > Diffs > ----- > > > /home/kde-devel/kdesvn/trunk/KDE/kdesdk/scripts/grantlee_strings_extractor.py > PRE-CREATION > > Diff: http://svn.reviewboard.kde.org/r/6405/diff > > > Testing > ------- > > Works locally. The code in playground/pim/contacts can be used to test this > with x-test once it's checked in. > > > Thanks, > > Stephen > >