【问题标题】:How to translate a country list in a django views.py?如何在 django views.py 中翻译国家/地区列表?
【发布时间】:2017-10-01 07:14:10
【问题描述】:

我正在使用 django 和标准国际化包,如下所示:excellent marina mele tuto.

在网络和移动设备上的用户表单中,我必须以用户的语言显示国家名称列表。

要创建国家/地区列表,我打算使用 django-country,它看起来很简单且有据可查。

我可以使用一个 API,无需模板,来请求国家/地区列表。

但是如何在views.py中翻译这个国家列表呢?

欢迎提供任何示例。

谢谢

【问题讨论】:

    标签: python django internationalization django-countries


    【解决方案1】:

    我猜你说的是django-countries?除了确保用户的语言被激活translation.activate(language) 之外,您不需要做任何事情,如果您使用i18n_urlpatterns,这也将在 Django 的中间件中处理。从那里,它将使用内置的 gettext 机制以用户的语言检索国家/地区名称。

    您可以在带有django_countries.serializer_fields.CountryField 的序列化程序中使用国家/地区对象,或者在带有

    的视图中使用
    from django_countries import countries
    from django.http import JsonResponse
    
    def countries_list(request):
        for code, name in list(countries):
            print(code, name)
    
        return JsonResponse({
            code: name for code, name in list(countries)
        })
    

    或者随你喜欢。在模板中:

    {% load countries %}
    {% get_country 'BR' as country %}
    {{ country.name }}
    

    应该可以工作,只要您的用户的语言被激活。

    【讨论】:

    • 在模板中,它可以完美运行。但我没有模板。由于代码必须在移动应用程序和网络上运行,我编写了一些 API。谢谢
    【解决方案2】:

    你可以看看django-modeltranslation,这个库是用来翻译你的模型数据的。

    否则,如果您想翻译国家列表,您可以构建一个新列表并在列表中的每个项目上使用内置的 django 翻译工具。

    【讨论】:

    • 看起来不错...我正在寻找代码示例来真正理解
    【解决方案3】:

    最后,我使用了一个简单的数组

    TranslatedCountries = {
    'france':   { 
                    'en':   u'france',
                    'fr':   u'france',
                    },
    
    'belgium':  {
                    'en':   u'belgium',
                    'fr':   u'belgique',
                    },
    'spain':    {
                     'en':  u'spain',
                     'fr':  u'espagne',
                    },
    'morocco':  {
                     'en':  u'morocco',
                     'fr':  u'maroc',
                    },
    

    }

    我访问它:

    try:
                CCC = TranslatedCountries[test_country.lower()][user_language.lower()]
            except :
                print "The country %s is not defines for the language %s" % (test_country.lower(),user_language.lower() )
                CCC = test_country
    
    print CCC
    

    我希望有人能给我们一个更简单、更快和更清洁的解决方案。 谢谢你的帮助。 铝

    【讨论】:

      【解决方案4】:

      万一有人还在寻找如何做到这一点。这很容易,很大程度上要归功于@slurms 的解释和通读相关的docs(尽管我花了一些时间才找到它们)。其实很简单。

      首先,您需要添加必要的设置:

      MIDDLEWARE = [
          ...
          'django.middleware.locale.LocaleMiddleware'
          ...
      ]
      USE_I18N = True
      

      然后从您的请求或其他参数中获取语言,然后可以开始翻译例如:

      from django.utils import translation
      from django_countries import countries
      
      
      def foo_bar(language):
         translation.activate(language)
         return [(translation.gettext(country.name), country.code) for country in countries]
      

      这就是你所需要的!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-19
        • 1970-01-01
        • 2013-08-22
        • 2015-03-08
        • 1970-01-01
        • 2013-02-27
        • 1970-01-01
        相关资源
        最近更新 更多