Pav*_*lon 10 django translation localization internationalization cjk
我正在尝试在我的Django应用程序中添加一个中文语言,我真的很难.我花了半天尝试不同的方法,没有成功.
我的应用程序支持几种语言,这是settings.py文件的一部分:
TIME_ZONE = 'Europe/Dublin'
LANGUAGE_CODE = 'en'
LOCALES = (
#English
('en', u'English'),
#Norwegian
('no', u'Norsk'),
#Finish
('fi', u'Suomi'),
#Simplified Chinese
('zh-CN', u'????'),
#Traditional Chinese
('zh-TW', u'????'),
#Japanese
('ja', u'???'),
)
Run Code Online (Sandbox Code Playgroud)
目前,所有(但中文)语言都能完美运作.这是locale目录的内容:
$ ls locale/
en
fi
ja
no
zh_CN
zh_TW
Run Code Online (Sandbox Code Playgroud)
在每个目录中,我都有LC_MESSAGES目录,其中包含*.mo和*.po文件.*.po文件由Python编写的脚本创建,它将*.ODS转换为文本文件.*.mo文件由python manage.py compilemessages命令创建.
用户可以从我的应用程序的"首选项"部分中的正确表单中选择语言.
Django不加载中文翻译.那就是问题所在.简化和传统都不起作用.我在settings.py和locale目录中尝试了不同的语言和区域代码变体:zh-CN,zh-cn,zh_CN,zh_cn.没有成功.
也许我犯了一个简单的错误?我添加了波兰语仅供测试,一切都很顺利.基本上我做了同样的事情.我已将('pl',u'Polish')元组添加到settings.py和带有*.po和*.mo以及LC_MESSAGES目录的"locale/pl"...
你知道什么可能是错的吗?
Der*_*wok 16
您需要使用小写字母作为语言环境语言代码才能正常工作.即使用
LANGUAGES = (
('zh-cn', u'????'), # instead of 'zh-CN'
('zh-tw', u'????'), # instead of 'zh-TW'
)
Run Code Online (Sandbox Code Playgroud)
请参阅https://code.djangoproject.com/browser/django/trunk/django/conf/global_settings.py中指定的语言代码.您将看到它使用zh-tw而不是zh-TW.
最后,语言目录存储在您的语言环境中的*.po和*的.mo文件夹需要命名zh_CN,并zh_TW分别为翻译才能正常工作.
mod*_*tos 10
对于Django 1.7及更高版本,您需要执行以下操作:
zh-hans在您的配置中,并确保您的目录已命名zh_Hans.
对于繁体中文:
zh-hant在您的配置中,您的目录应该被命名zh_Hant.
下面是一个auth贡献者包如何在语言环境目录中列出其翻译的示例:https://github.com/django/django/tree/master/django/contrib/auth/locale
基本上,对于我们的中文代码,将-其替换为a _,并且第二个作品的第一个字母大写.
这个逻辑的源代码在这里:https://github.com/django/django/blob/master/django/utils/translation/trans_real.py#L63-L78
只是为了彻底,这是方法:
def to_locale(language, to_lower=False):
"""
Turns a language name (en-us) into a locale name (en_US). If 'to_lower' is
True, the last component is lower-cased (en_us).
"""
p = language.find('-')
if p >= 0:
if to_lower:
return language[:p].lower() + '_' + language[p + 1:].lower()
else:
# Get correct locale for sr-latn
if len(language[p + 1:]) > 2:
return language[:p].lower() + '_' + language[p + 1].upper() + language[p + 2:].lower()
return language[:p].lower() + '_' + language[p + 1:].upper()
else:
return language.lower()
Run Code Online (Sandbox Code Playgroud)
注意,en-us变成en_US,基于上面的源代码,因为us是2个字符或更少.
| 归档时间: |
|
| 查看次数: |
11352 次 |
| 最近记录: |