要进行本地化的字符串中间的参数

时间:2010-03-03 10:17:31

标签: python internationalization

我是Python的初学者。我的问题非常简单。我有一个字符串要在python应用程序中本地化,包含参数:

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

这实际上完成了这项工作,但实际上并不是我称之为好的方法。更不用说某些语言会要求在名字之前显示姓氏。

有更好的方法吗?我想在翻译字符串中放置自定义标签,如{{fn}}或{{ln}},并在显示字符串之前用实际值替换它们。但似乎并不是真的更愉快。

谢谢,

皮尔

4 个答案:

答案 0 :(得分:3)

我建议

print 'Hello dear user, your name is %(first_name)s %(last_name)s' % params

答案 1 :(得分:1)

这样的事情可以解决问题:

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

答案 2 :(得分:1)

如果我是你,我会选择模板。这样可以为每种语言提供单独的模板。例如:

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))

答案 3 :(得分:0)

  

我考虑过在翻译字符串中放置{{fn}}或{{ln}}等自定义标记,并在显示之前用实际值替换它们。

这就是我要做的。每个语言版本在适当位置的占位符都应该可以胜任。

有一点要提到的是,在某些语言中,人们的姓名必须根据句子中的位置以及如何使用来修改。您需要了解每种特定语言才能正确完成。

一种可能的解决方案:将“在句子中间”的案件保持在最低限度。保持可本地化的资源分开。

而不是Hello dear user, your name is {{UserName}}

使用User name: {{UserName}}