1

プロジェクトに国際化を実装する必要があるため、静的コンテンツには i18n を使用し、モデルにはアプリ django-modeltranslation を使用したいと考えています。次の言語をサポートしています。

en-us (デフォルト) nl-nl de-de fr-fr es-es

私はオランダ人ですが、django はオランダ語に変わりません。私は英語のウィンドウを持っていますが、クロムは国際化をテストするためにオランダ語に設定されています。これは唯一の問題ではありません。デフォルトの言語が変更されたときにモデルが自動的に翻訳されるだけです。デフォルト言語をオランダ語に設定すると、すべてのモデルでオランダ語の翻訳が表示されますが、静的コンテンツは英語のままです。

注: 私は compilemessages を使用し、サーバーを再起動しました

設定.py

USE_I18N = True

LANGUAGE_CODE = 'en-us'

gettext = lambda s: s
LANGUAGES = (
    ('en-us', gettext('English')),
    ('nl-nl', gettext('Dutch')),
    ('fr-fr', gettext('French')),
    ('de-de', gettext('German')),
    ('es-es', gettext('Spain')),
)

LOCALE_PATHS = ('/vagrant/locale', )

/vagrant/locale/en-us/LC_MESSAGES/django.po (エラーを表示する短縮ファイル)

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-05-17 23:14+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Language: en-us\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: PyDiving/settings.py:170
msgid "English"
msgstr ""

#: PyDiving/settings.py:171
msgid "Dutch"
msgstr ""

#: PyDiving/settings.py:172
msgid "French"
msgstr ""

#: PyDiving/settings.py:173
msgid "German"
msgstr ""

#: PyDiving/settings.py:174
msgid "Spain"
msgstr ""

#: company/templates/company/company_detail.html:22
msgid "City"
msgstr ""

/vagrant/locale/nl-nl/LC_MESSAGES/django.po (投稿を短くするために違いのみを表示)

"Language: nl-nl\n"

#: company/templates/company/company_detail.html:28
msgid "Postal Code"
msgstr "Postcode"

#: company/templates/company/company_detail.html:34
msgid "City"
msgstr "Stad"

テンプレート会社/templates/company/company_detail.html

{% load i18n %}
{{ company.text }} # this is the model translation, this will change when i change the default language
{% trans "City" %} # this always says "City"

デフォルト言語が en-us の場合の結果

EnglishCity

ここで、「英語はモデルのコンテンツです」

デフォルト言語 nl-nl

NederlandsCity
4

3 に答える 3

2

さまざまなプラットフォームがさまざまな言語のフォルダー名を許可/優先することがわかりました。'/pt-br/LC_MESSAGES/' が機能しないため、開発システム (Mac OS X) で髪を引っ張っていました。言語の名前を「/pt_br/LC_MESSAGES/」に変更すると、ようやく動き出しました(アンダースコアに注意してください)。ここで使用しているように、設定のLANGUAGESタプルはaa-bb形式を使用していることに注意してください。

同じプロジェクトを本番環境 (Ubuntu) に移行すると、再び動作しなくなりました。Sun の下ですべてを試してみましたが、フォルダー名は私の開発環境で動作するため、既に正しいはずです。機械。最後に、必死になって国コンポーネントを「/pt_BR/LC_MESSAGES/」のように大文字にしようとしましたが、ブーム、再び機能し始めました。aa_BB フォームの使用は普遍的に機能することがわかりました。

したがって、あなたが探していると思う解決策は、ロケール フォルダー内のロケール ディレクトリの名前を変更することです。あなたが持っている必要があります:

[project]
    locale
        de_DE
        en_US
        es_ES
        fr_FR
        nl_NL
    ...
    settings.py

もちろん、それぞれの中に LC_MESSAGES などがあります。Django の設定は変更しないでください。これは、プラットフォームで gettext が受け入れるものです。繰り返しますが、aa_BB 形式を使用すれば、ほとんどのシステムで問題ないと思います。

何らかの理由でロケール フォルダが別の場所に必要な場合は、プロパティ settings.LOCALE_PATHS を適切に設定してください。また、Django のドキュメントでは、このフォルダーを見つける方法が明確になっています: https://docs.djangoproject.com/en/dev/topics/i18n/translation/#how-django-discovers-translations

于 2013-05-28T11:55:12.377 に答える
1

この質問に回答してから1年以上経っていることは知っていますが、同様の問題に遭遇し、何時間も理解しようとした後、最終的に決定論的な答えにたどり着きました。

免責事項: 私は pt-br を母国語として使用していますが、これを任意の言語に派生させることができます

まず、私のdjangoアプリケーションで何をしましたか(プロジェクトとアプリをすでに作成しており、現在のディレクトリがプロジェクトディレクトリであると仮定します):

  • 作成されたロケール ディレクトリ:mkdir locale
  • pt_BR ロケールを作成しました:django-admin.py makemessages -l pt_BR
  • 作成されたファイル内のテキストを変更しました
  • すべてのメッセージをまとめました:django-admin.py compilemessages
  • django 設定に LOCALE_PATHS 変数を追加しました:LOCALE_PATHS =('/path/to/locale_foder',)

この後、私の Django アプリは翻訳されなくなりました。私が何をしたとしても...

django のドキュメント ( https://docs.djangoproject.com/en/dev/topics/i18n/translation/#how-django-discovers-language-preference ) によると、django には言語設定を見つけるための定義済みの方法があり、これがその方法です。できます:

  1. これが機能するには、django URLでi18n_patternsを使用する必要があります。
  2. 上記が失敗した場合は、ユーザー セッションで変数を検索します
  3. 上記が失敗した場合は、Cookie を検索します
  4. 上記が失敗した場合は、Accept-Language HTTP ヘッダーを使用します
  5. 上記が失敗した場合は、django 設定の同名変数で指定された言語を使用します。

番号 4 を強調表示しました。これは、私の場合、それを使用しているためです。これは、アプリケーションが HTTP ブラウザ データに依存していることを意味します。

ここでは HTTP データに依存しているため、ブラウザの動作を確認してみましょう。主にクロームとファイアフォックスを使用しています。私のノートブックには、クロムの次の言語設定があります。

  • ポイント
  • en-us
  • ja

それが問題です。Accept-Language HTTP ヘッダーが pt を送信していますが、pt ロケールがなく、pt-br ロケールしかありません。逆の場合は、これでうまくいきます。私の結論は、常に iso 639-1 コードを持ち、そこから専門化を使用する必要があるということです。例: 現在、pt-br のデフォルトとして pt を使用しており、ポルトガル固有の翻訳には pt-pt を使用しています。

于 2014-05-28T05:02:57.620 に答える
0

この投稿に出くわしました: Django internationalization language components。どうやら、django は iso 639-1 言語コードのみをサポートしていますが、これはドキュメントにはありません。さらに悪いことに、en-us のようなコードを使用する必要があると書かれています。言語を en-us > en、nl-nl > nl などに変更するとすぐに機能しました。

とにかく、お気遣いありがとうございます。

于 2013-05-23T15:18:39.320 に答える