Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 国际化Django应用返回英语_Python_Django_Localization_Internationalization_Django Cms - Fatal编程技术网

Python 国际化Django应用返回英语

Python 国际化Django应用返回英语,python,django,localization,internationalization,django-cms,Python,Django,Localization,Internationalization,Django Cms,我的django应用程序使用的是欧洲语言。现在我想回到英语,正确地进行国际化和本地化。我是在setting.py中做的 LANGUAGE_CODE = 'en' LANGUAGES = [ ('en', 'English'), ] 但整个应用程序仍然没有用英语显示。我是不是遗漏了什么? 另外,该应用程序还使用Django CMS。您需要执行多项操作: 用一种语言编写所有字符串,以英语为例 然后需要标记所有字符串以进行翻译: 在模板中的所有字符串周围添加trans标记(来自i18n

我的django应用程序使用的是欧洲语言。现在我想回到英语,正确地进行国际化和本地化。我是在setting.py中做的

LANGUAGE_CODE = 'en'
LANGUAGES = [
    ('en', 'English'),
]
但整个应用程序仍然没有用英语显示。我是不是遗漏了什么?
另外,该应用程序还使用Django CMS。

您需要执行多项操作:

  • 用一种语言编写所有字符串,以英语为例
然后需要标记所有字符串以进行翻译:

  • 在模板中的所有字符串周围添加
    trans
    标记(来自
    i18n
    模板标记库),请参见文档中的。这与gettext有关:一个处理翻译的公共库。通过在字符串周围添加
    trans
    标记,它们将包含在需要翻译的字符串的巨大列表中(请参见下面的
    .po
    .mo
  • 在Python源代码中的所有字符串周围添加
    (来自
    django.utils.translation
    ,另请参见文档中的国际化)。这也与gettext相关,并且在gettext语言文件中也包括这些字符串
然后,您需要创建语言文件并将翻译添加到这些文件中:

  • 创建包含翻译字符串的gettext
    .po
    .mo
    文件。在这些文件中,您可以编写翻译后的字符串。这两个文件通常放在
    /locale/
    目录中。对于每种语言,您都需要编写翻译后的字符串并将其放入这些文件中。有关这些语言文件的更多详细信息,请参阅上的Django文档
阅读Django关于(通常称为i18n)的概述是很好的,因为上面的解释只是实现这一点的一般方法。确切的技术细节在文档中


请注意,以上内容仅用于翻译作为Python代码或模板一部分的静态字符串。如果您想转换URL或Django模型,那么您需要安装其他库或使用其他现有的Django功能。例如,在Django 1.4中,添加了一些功能来翻译URL,但对于早期的Django版本,您需要使用library/Django应用程序来实现这一点。

Simeon的回答涵盖了所有方面,但在这里,我发现了一些可以帮助任何人在开发环境中测试本地化的东西

如果您是土生土长的欧洲人,那么您的浏览器可能会请求将
公认语言
作为
es
,仅作为示例

现在,您想在本地环境中测试英语翻译,然后需要考虑下面的可能性。

根据的参考:

你需要把

1> 首先,它在当前用户的 会议

2> 如果做不到这一点,它会寻找一块饼干

3> 否则,它将查看Accept Language HTTP头。这 标头由浏览器发送,并告知服务器使用哪种语言 你更喜欢,按优先级排序。Django会尝试每种语言 标题,直到找到具有可用翻译的标题

4> 否则,它将使用全局语言代码设置

现在,您看到它将检查
语言\u code
设置作为最后手段


因此,您可以在浏览器中使用HTTP请求拦截器,并更改
接受的语言
值,以动态测试您的语言翻译。

非常感谢Simeon。嗯,是的,我知道这些步骤,我在跳入这个应用程序之前创建了一个演示应用程序。我的问题是,应用程序是使用django国际化/本地化步骤编写的,当我尝试恢复到英语时,它失败了。字符串有问题吗?此应用中使用的字符串是英语和非英语的混合字符串。您不能有混合字符串:所有字符串必须使用一种语言,然后您可以使用翻译文件更改语言。Django知道在您更改请求的当前语言时加载正确的语言文件。再次非常感谢。我想这就是我的应用程序没有用英语呈现的原因。将修复:)我的应用程序也使用Django CMS。我想这与CMS有关。有什么想法吗?Django CMS也是可翻译的,但它需要额外的配置(例如不同的语言),请参阅和