国际化,切换语言的一些问题

Posted

技术标签:

【中文标题】国际化,切换语言的一些问题【英文标题】:Internationalization, some problems with switching languages 【发布时间】:2013-07-26 14:49:49 【问题描述】:

我有一个英文网站,想添加俄文。 设置.py

LANGUAGE_CODE = 'zh'

语言 = ( ('en', ('English')), ('ru', ('俄语')), )

MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', # 取消注释下一行以获得简单的点击劫持保护: # 'django.middleware.clickjacking.XFrameOptionsMiddleware', )

urls.py

url(r'^i18n/', 包含('django.conf.urls.i18n')),

简单形式的 grom django 文档

> <form action="/i18n/setlang/" method="post" id="language-select">
>        <input name="next" type="hidden" value="/" />
>             % csrf_token %
>             <select name="language">
>                 % for lang in LANGUAGES %
>                     <option value=" lang.0 "> lang.1 </option>
>                 % endfor %
>             </select>
>        <input type="submit" value="Go" /> </form>

我安装 gettext,添加“locale”文件夹(在项目文件夹中,靠近 manage.py)。使用 .po 文件创建“ru 文件夹”并添加一些翻译。但是在更改语言后,它会返回 [26/Jul/2013 13:43:32] "POST /i18n/setlang/ HTTP/1.1" 302 0 并重定向到英文页面。这里有什么问题?

【问题讨论】:

你在 settings.py - USE_I18N=True ? 是的,USE_I18N = True,USE_L10N = True 你在 locale/ru/ 中也有 .mo 文件吗? 【参考方案1】:

你必须把django.middleware.locale.LocaleMiddleware after django.contrib.sessions.middleware.SessionMiddlewarebefore django.middleware.common.CommonMiddleware

例子:

MIDDLEWARE_CLASSES = (
   'django.contrib.sessions.middleware.SessionMiddleware',
   'django.middleware.locale.LocaleMiddleware',
   'django.middleware.common.CommonMiddleware',
)

https://docs.djangoproject.com/en/dev/topics/i18n/translation/#how-django-discovers-language-preference

【讨论】:

谢谢,但这对主要问题没有帮助。 Сan 你粘贴 html 代码,该代码由以下代码生成:% for lang in LANGUAGES % 在语言中 (('en', 'English'), ('ru', 'Russian')) 。 HTML 代码: 我在那里找到了解决方案 ***.com/questions/14031753/… 。我在设置中有 LOCALE_PATHS = (os.path.join(os.path.dirname(file),'locale'), ) 行,但只有当我将 'locale' 更改为 ' ../locale/'【参考方案2】:

您是否在 urls.py 中使用 i18n_patterns 作为支持两种语言的 URL?

from django.conf.urls import include, url
from django.conf.urls.i18n import i18n_patterns

urlpatterns += i18n_patterns(
    url(r'^about/$', views.anything, name='about'),
)

https://docs.djangoproject.com/en/1.9/topics/i18n/translation/#language-prefix-in-url-patterns

【讨论】:

以上是关于国际化,切换语言的一些问题的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发之本地化国际化语言设置

Android国际化多语言切换

vue切换中英语言制作方法(Element+i18n的使用)

Qt系列文章之三十九(Qt多语言国际化程序实例设计实现)

Qt系列文章之三十九(Qt多语言国际化程序实例设计实现)

iOS - 国际化语言切换