用Django翻译json文件

时间:2016-05-02 13:23:36

标签: python json django translation

我尝试使用我的json_file在我的html中构建一些导航栏:

例如我的json_file:

{
"_comment":"example auto build navbar",
    "TOP" :[
            {
                "name"      : "name1",
                "id"        : "MLO",
                "title"     : "Title than i want translate"         
            }]
}

在我的view.py中:

def view(request):
'''

'''
    with open('IHMWEB/json_file.json') as data_file:    
        data = json.load(data_file)
    c = {'user_username': request.session['user_username'],
         "data"         : data}
    context = Context(c)

    template = get_template('view.html')
    translation.activate(settings.LANGUAGE_CODE)
    html = template.render(context)    
    return HttpResponse(html)

并在我的模板中:

{% for menu in data.TOP %}
    <a href="#" id={{menu.id}} title="{{menu.title}}" class="navbar-brand"> {{menu.name}}</a>
{% endfor %}

如何使用gettext翻译“title”并将翻译发送到我的template.html?有可能吗?

1 个答案:

答案 0 :(得分:2)

从Python文件加载翻译字符串并使用常规ugettext()进行翻译可能是个更好的主意。

但是,回答你的问题:Django模板系统非常通用,基本上可以用于任何类型的文本字符串。因此,您也可以使用它来翻译您的JSON文件内容。然而,它非常“hackish”,并没有真正推荐。

t = Template(open('/path/to/menu.json').read())
c = Context({})
translated_json = t.render(c)
py_obj = json.loads(translated_json)

这应该从模板呈现的JSON字符串中生成一个python对象。您的menu.json看起来像这样

{% load i18n %}
{
  "_comment":"example auto build navbar",
  "TOP" :[
    {
      "name"      : "name1",
      "id"        : "MLO",
      "title"     : "{% trans 'Title than i want translate' %}"         
    }
  ]
}

您将该文件加载到模板渲染器中,然后加载i18n模块并翻译任何{% trans %}字符串。

运行makemessages时,请记住要包含要搜索转换字符串的.json个文件。