Je nach Gebietsschema möchten Sie möglicherweise Fehlermeldungen trennen. Ich wusste nicht, was ich in einem solchen Fall tun sollte, also habe ich nachgeschlagen.
translationstring
Verwenden Sie translationstring. Dies scheint für die Lokalisierung in den Paketen verwendet zu werden, die sich auf das Pyrons-Projekt beziehen. Es scheint, dass es den gettext-Mechanismus verwendet, der häufig für die allgemeine Übersetzung verwendet wird.
"Fehler" im japanischen Gebietsschema. Betrachten Sie ansonsten eine Zeichenfolge, die "Fehler" anzeigt.
Es scheint, dass die von translationstring.TranslationStringFactory generierte Funktion für die Notation verwendet werden sollte. Wickeln Sie es in ein Übersetzerobjekt, um den Wert zu konvertieren.
Zusätzlich zum folgenden Code benötigen Sie eine .mo-Datei.
translationstring_example.py
# -*- coding:utf-8 -*-
import gettext
import translationstring
# .So arbeiten Sie gut mit dem Tool zur Generierung von Po-Dateien_Es ist besser, es zu nennen
_ = translationstring.TranslationStringFactory('sample')
lang = gettext.translation("sample", "./locale", languages=["ja"], codeset="utf8")
translator = translationstring.Translator(lang)
print(translator(_("failure")))
Die .mo-Datei ist das von gettext verwendete Format. Generiert aus einer .po-Datei mit einem Befehl mit msgfmt. Generieren Sie eine .po-Datei vor der .mo-Datei. Verwenden Sie dazu pot-create.
Ein Paket namens lingua generiert eine .po-Datei für Sie. ligua selbst benötigt kein babel, aber babel wurde angefordert, als versucht wurde, pot-create auszuführen.
pip install lingua babel
Nach der Installation von Lingua können Sie Pot-Create verwenden. Generieren Sie eine POO-Datei
mkdir -p locale/ja/LC_MESSAGES/
pot-create translation_example.py -o locale/ja/LC_MESSAGES/sample.po
Der Dateiname zum Umschreiben der generierten sample.po sollte mit dem an TranslationStringFactory übergebenen Domänennamen übereinstimmen.
Schreiben Sie wie folgt um. Ursprünglich ist es besser, Teile wie den Namen des Übersetzers neu zu schreiben. Diesmal habe ich gerade den letzten Teil umgeschrieben
#
# SOME DESCRIPTIVE TITLE
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE 1.0\n"
"POT-Creation-Date: 2014-06-12 15:37+09:00\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS\n"
"Language-Team: LANGUAGE <[email protected]>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: \n"
#: ./translation_example.py:11
#, c-format
msgid "failure"
msgstr "Fehlerwert"
Der Unterschied ist wie folgt
diff --git a/locale/ja/LC_MESSAGES/sample.po b/locale/ja/LC_MESSAGES/sample.po
index 2559ffb..db040c4 100644
--- a/locale/ja/LC_MESSAGES/sample.po
+++ b/locale/ja/LC_MESSAGES/sample.po
@@ -18,4 +18,4 @@ msgstr ""
#: ./translation_example.py:11
#, c-format
msgid "failure"
-msgstr ""
+msgstr "Fehlerwert"
Verwenden Sie msgfmt, um eine .mo-Datei zu erstellen.
msgfmt locale/ja/LC_MESSAGES/sample.po -o locale/ja/LC_MESSAGES/sample.mo
$ tree
.
├── locale
│ └── ja
│ └── LC_MESSAGES
│ ├── sample.mo
│ └── sample.po
├── requirements.txt
└── translation_example.py
3 directories, 4 files
Jetzt wird "Fehler" in "Fehlerwert" übersetzt und angezeigt.
$ python translation_example.py
Fehlerwert
gettext überprüft die Gebietsschemainformationen und fragt nach der Zuordnung, die beim Übersetzen verwendet werden soll.
LANG="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_CTYPE="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_ALL=
Es scheint gut, gettext.find zu verwenden, um zu überprüfen, ob die .mo-Datei erfolgreich gelesen werden kann.
# -*- coding:utf-8 -*-
import gettext
print(gettext.find("sample", "./locale",["ja"]))
# ./locale/ja/LC_MESSAGES/sample.mo
Sie können herausfinden, wo Sie die .po-Datei erstellen können, indem Sie sich den Code gettext.find ansehen.
gettext.py
# Locate a .mo file using the gettext strategy
def find(domain, localedir=None, languages=None, all=False):
# Get some reasonable defaults for arguments that were not supplied
if localedir is None:
localedir = _default_localedir
if languages is None:
languages = []
for envar in ('LANGUAGE', 'LC_ALL', 'LC_MESSAGES', 'LANG'):
val = os.environ.get(envar)
if val:
languages = val.split(':')
break
if 'C' not in languages:
languages.append('C')
# now normalize and expand the languages
nelangs = []
for lang in languages:
for nelang in _expand_lang(lang):
if nelang not in nelangs:
nelangs.append(nelang)
# select a language
if all:
result = []
else:
result = None
for lang in nelangs:
if lang == 'C':
break
mofile = os.path.join(localedir, lang, 'LC_MESSAGES', '%s.mo' % domain)
if os.path.exists(mofile):
if all:
result.append(mofile)
else:
return mofile
return result
Holen Sie sich ungefähr Sprachen wie "ja" von ('LANGUAGE', 'LC_ALL', 'LC_MESSAGES', 'LANG'), Sie können sehen, dass versucht wird, den Wert aus der .mo-Datei unter localedir / ja / LC_MESSAGS / abzurufen.
Übersetzungszeichenfolge kann auch Sätze übersetzen, die Argumente enthalten.
msg2 = _("add-number", default="Add ${number}", mapping={"number": 1})
lang = gettext.translation("sample", "./locale", languages=["ja"], codeset="utf8")
translator = translationstring.Translator()
print(translator(_("add-number", mapping={"number": 10})))
#10 hinzufügen
Schreiben Sie zu diesem Zeitpunkt den .placeholder in $ {} in die .po-Datei, wie unten gezeigt.
msgid "add-number"
msgstr "${number}Bitte hinzufügen"
Recommended Posts