首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django不同行业/应用的翻译

Django不同行业/应用的翻译
EN

Stack Overflow用户
提问于 2014-08-07 16:41:23
回答 2查看 82关注 0票数 0

我们正在开发一个应用程序,它将服务于多个行业。我希望使用django的i18n功能来完成两件事:

  1. 翻译成不同的语言(标准)。
  2. 翻译到不同的行业(更不用说标准了)。

假设应用程序为兽医和汽车修理工服务,您将得到一个选项矩阵:

代码语言:javascript
复制
              | English | French
----------------------------------
Vets          | horse   | cheval 
----------------------------------
Car Mechanics | car     | voiture

我想我可以很容易地为不同的上下文设置消息文件:

代码语言:javascript
复制
python manage.py makemessages -l fr_vet
etc...

现在我该如何激活翻译呢?

我知道在中间行业,从请求,我可以子类django.middleware.locale.LocaleMiddleware和修改它,或者我需要子类django.utils.translation和修改激活功能?还是完全不同的东西?

如果我错过了关于如何做到这一点的现有解释--这是一个经典的例子:“我确信答案肯定存在,但我不知道答案是什么,我不能搜索它”。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-16 21:25:27

劳拉的回答是有用的,但没有完全解释,我认为有必要补充一个完整的解释。

所需要的只是添加设置业界翻译代码的中间件:

代码语言:javascript
复制
    from django.middleware.locale import LocaleMiddleware
    from django.utils import translation

    class CustomLocaleMiddleware(LocaleMiddleware):
        def process_request(self, request):
            check_path = self.is_language_prefix_patterns_used()
            language = translation.get_language_from_request(
                request, check_path=check_path)
            if hasattr(request, 'user_info'):
                language = language[:2] + '-' + request.user_info['trans_code']
            translation.activate(language)
            request.LANGUAGE_CODE = translation.get_language()

(注意:user_info是在中间件中添加到request中的,称为CustomLocaleMiddleware之前的)。

request.user_info['trans_code']将被设置为"ve“用于兽医,"cm”用于汽车修理工。

然后在设置中:

代码语言:javascript
复制
    MIDDLEWARE_CLASSES = (
        ...
        'path.to.middleware.CustomAuthMiddleware', # this adds request.user_info
        'path.to.middleware.CustomLocaleMiddleware',
        ...
    )

    LANGUAGE_CODE = 'en'
    USE_I18N = True
    USE_L10N = True

    LANGUAGES = (
        ('en-ve', 'English Vets'),
        ('en-cm', 'English Car Mechanics'),
        ('fr-ve', 'French Vets'),
        ('fr-cm', 'French Car Mechanics'),
    )

    LOCALE_PATHS = (os.path.join(BASE_DIR,'locale'),)

可以用以下方法创建.po文件

代码语言:javascript
复制
python manage.py makemessages -l en_VE -l en_CM -l fr_VE -l fr_CM

这样做的好处是,如果你还没有构建"de-ve“或"de-cm”,它就会默认为标准的"de“翻译。

票数 0
EN

Stack Overflow用户

发布于 2014-08-07 21:12:48

我曾经遇到过同样的情况,我读过几乎所有关于翻译的Django文档(它真的很大).我想与大家分享一些重要的链接,这些链接可以帮助:

在模板中切换语言:https://docs.djangoproject.com/en/dev/topics/i18n/translation/#switching-language-in-templates

这个,我认为是对你来说最重要的一个,“django如何发现语言.”https://docs.djangoproject.com/en/dev/topics/i18n/translation/#how-django-discovers-language-preference

我认为您缺少的是设置文件中的语言,例如:

代码语言:javascript
复制
LANGUAGES = (
   ('de', _('German')),
   ('en', _('English')),
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25187845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档