Аргументы в середине строки для локализации - PullRequest
1 голос
/ 03 марта 2010

Я новичок в Python. Моя проблема довольно проста. У меня есть строка для локализации в приложении Python, содержащее параметры:

print _('Hello dear user, your name is ') + params['first_name'] + ' ' + params['last_name'] + _(' and blah blah blah')

Это действительно делает работу, но на самом деле это не то, что я бы назвал хорошим способом сделать это. Не говоря уже о том, что некоторые языки, например, требуют, чтобы фамилия отображалась перед именем.

Есть ли лучший способ сделать это? Я думал о размещении пользовательских тегов, таких как {{fn}} или {{ln}} в строке перевода и замене их фактическими значениями перед отображением строки. Но, похоже, это не очень приятно.

Спасибо

Pierre

Ответы [ 4 ]

3 голосов
/ 03 марта 2010

Я бы предложил

print 'Hello dear user, your name is %(first_name)s %(last_name)s' % params
1 голос
/ 03 марта 2010

Я бы пошел с шаблонами на вашем месте. Это позволило бы вам иметь отдельный шаблон для каждого языка. Например:

from string import Template
s_en = Template('Hello dear user, your name is $first_name $last_name and blah blah blah')
s_sco = Template('Hello, $first_name of the clan Mac$last_name...')

user = {'last_name': 'Duncan', 'first_name': 'Leod'}

print(s_en.substitute(user))
print(s_sco.substitute(user))
1 голос
/ 03 марта 2010

Примерно так должно получиться:

print _('Hello dear user, your name is %s %s and blah blah blah') % (params['first_name'], params['last_name'])
0 голосов
/ 03 марта 2010

Я думал о размещении пользовательских тегов, таких как {{fn}} или {{ln}}, в строке перевода и замене их фактическими значениями перед их отображением.

Я бы так и сделал. Заполнители в нужных местах для каждой языковой версии должны выполнять эту работу.

Следует отметить, что в некоторых языках имена людей должны быть изменены в зависимости от того, где в предложении и как они используются. Вы должны знать каждый конкретный язык, чтобы иметь возможность делать это правильно.

Возможное решение: свести случаи "в середине предложения" к минимуму. Храните локализуемый ресурс отдельно.

Вместо Hello dear user, your name is {{UserName}}

использовать User name: {{UserName}}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...