使用 PyCharm 创建多语言应用程序 -> 从语言文件导入变量以便能够阅读代码
Using PyCharm to Create Multi-Language App -> Import the variables from the language file to be able to read the code
我正在使用 PyCharm 在 Python 中创建一个多语言应用程序。我以前从未创建过多语言应用程序。该应用程序有一个首选项菜单,最终用户可以在其中 select 他们的本地语言。例如,英语、西班牙语等...如果最终用户选择英语,则应用程序会使用 languages/en.py
文件。
languages/en.py
示例
welcome = 'Welcome to the app'
name_ques = 'What is your name? '
city_ques = 'What city do you live in? '
main.py
的例子
import languages/en as lg
print(lg.welcome)
name = input(lg.name_ques)
city = input(lg.city_ques)
print(f'Your name is: {name}\nYou live in: {city}')
非常基础。我的程序有数百行。但是,在我编写程序时,由于语言导入,代码变得越来越难以阅读。
如果几天过去了,我回来查看 main.py
并看到 name = input(lg.name_ques)
我不知道它在问什么,而没有转到 english.py 文件并查找变量 name_ques
.
我的问题是,在 PyCharm 中有没有办法让 PyCharm 临时导入“措辞”,以便您可以看到它实际上在说什么?如果那有意义的话。我很难解释我想做什么。在查看main.py
时,PyCharm将main.py
中的lg.name_ques
暂时变为What is your name?
。如果这是不可能的,如果有人在任何关于他们的程序的指导之前创建了多语言应用程序,将不胜感激!
谢谢!
感谢@furas 的评论,执行此操作的过程非常简单。
这不是 PyCharm 的功能。相反,正确的方法是使用带有 GetText API.
的 POT 文件
使用我问题中的示例代码。
示例:test/main.py
ln = gettext.translation('base', localedir='locale', fallback=True)
ln.instal()
_ = ln.gettext
print(Welcome to the app)
name = input(_(What is your first name? ))
city = input(_(What city do you live in?))
print(f'_(Your name is: {name}\nYou live in: {city}'))
任何需要翻译的内容都需要在其周围添加 _()。因为这是标准。
从命令提示符 运行:
xgettext -i main.py -o base.pot -d base
在您的 test
目录中,您现在将拥有 main.py 和 base.pot
来自测试目录:
mkdir -p locale/es/LC_MESSAGES
es 用于任何语言。在这个例子中是西班牙语。
*注意:这是 GetText
的 2-alpha 标准语言代码列表
https://www.gnu.org/software/gettext/manual/html_node/Usual-Language-Codes.html
接下来将您的 base.pot 文件复制到 local/es/LC_MESSAGES
文件夹并将其重命名为 .po
cp base.pot /test/locale/es/LC_MESSAGES/base.po
接下来是您进行翻译的地方。使用您喜欢的文本编辑器编辑目录 locale/es/LC_MESSAGES
中的 base.po
。例如
nano base.po
您将看到以 msgid
开头然后在 msgstr ""
下的行
我的示例代码中的示例:
msgid "Welcome to the app"
msgstr ""
msgid "What is your name? "
msgstr ""
msgid "What city do you live in? "
msgstr ""
使用您最喜欢的翻译器 Ex. Google Translator 或我最喜欢的 AWS Translator。 *注意:AWS Translator 你也可以上传你的 POT 文件。
从 msgid
复制您翻译的文本并将其复制到 msgstr
我的代码示例:
msgid "Welcome to the app"
msgstr "Bienvenido a la aplicación"
msgid "What is your name? "
msgstr "¿Cuál es su nombre? "
msgid "What city do you live in? "
msgstr "¿En qué ciudad vives? "
当您在文件的 header 中编辑文件时,更改行:
Content-Type: text/plain; charset=CHARSETn
到
"Content-Type: text/plain; charset=UTF-8\n"
或任何语言的首选编码。
这是.po文件标题的参考
https://www.gnu.org/software/gettext/manual/html_node/Header-Entry.html#Header-Entry
保存您的 .po 文件
我们现在需要制作一个 .mo
文件。 .mo
文件只是一个解析的二进制文件。为此 运行 在 LC_MESSAGE
目录中的命令提示符下执行以下命令。
msgfmt base.po -o base.mo
就是这样! :)
在 main.py
所在的文本目录中,您可以通过 运行ning:
进行测试
LANGUAGE=es python3 main.py
在学习如何执行此操作时,我使用了此网站作为参考。这只是一个快速 运行 下降。我非常强调要花时间阅读以下文章,因为它深入探讨了如何使用 GetText。
https://phrase.com/blog/posts/translate-python-gnu-gettext/
*旁注:要使用 pot 文件的 AWS Translate 自动功能,说明如下:
https://aws.amazon.com/blogs/machine-learning/translating-your-website-or-application-automatically-with-amazon-translate-in-your-ci-cd-pipeline/
我正在使用 PyCharm 在 Python 中创建一个多语言应用程序。我以前从未创建过多语言应用程序。该应用程序有一个首选项菜单,最终用户可以在其中 select 他们的本地语言。例如,英语、西班牙语等...如果最终用户选择英语,则应用程序会使用 languages/en.py
文件。
languages/en.py
welcome = 'Welcome to the app'
name_ques = 'What is your name? '
city_ques = 'What city do you live in? '
main.py
import languages/en as lg
print(lg.welcome)
name = input(lg.name_ques)
city = input(lg.city_ques)
print(f'Your name is: {name}\nYou live in: {city}')
非常基础。我的程序有数百行。但是,在我编写程序时,由于语言导入,代码变得越来越难以阅读。
如果几天过去了,我回来查看 main.py
并看到 name = input(lg.name_ques)
我不知道它在问什么,而没有转到 english.py 文件并查找变量 name_ques
.
我的问题是,在 PyCharm 中有没有办法让 PyCharm 临时导入“措辞”,以便您可以看到它实际上在说什么?如果那有意义的话。我很难解释我想做什么。在查看main.py
时,PyCharm将main.py
中的lg.name_ques
暂时变为What is your name?
。如果这是不可能的,如果有人在任何关于他们的程序的指导之前创建了多语言应用程序,将不胜感激!
谢谢!
感谢@furas 的评论,执行此操作的过程非常简单。 这不是 PyCharm 的功能。相反,正确的方法是使用带有 GetText API.
的 POT 文件使用我问题中的示例代码。
示例:test/main.py
ln = gettext.translation('base', localedir='locale', fallback=True)
ln.instal()
_ = ln.gettext
print(Welcome to the app)
name = input(_(What is your first name? ))
city = input(_(What city do you live in?))
print(f'_(Your name is: {name}\nYou live in: {city}'))
任何需要翻译的内容都需要在其周围添加 _()。因为这是标准。
从命令提示符 运行:
xgettext -i main.py -o base.pot -d base
在您的 test
目录中,您现在将拥有 main.py 和 base.pot
来自测试目录:
mkdir -p locale/es/LC_MESSAGES
es 用于任何语言。在这个例子中是西班牙语。
*注意:这是 GetText
的 2-alpha 标准语言代码列表
https://www.gnu.org/software/gettext/manual/html_node/Usual-Language-Codes.html
接下来将您的 base.pot 文件复制到 local/es/LC_MESSAGES
文件夹并将其重命名为 .po
cp base.pot /test/locale/es/LC_MESSAGES/base.po
接下来是您进行翻译的地方。使用您喜欢的文本编辑器编辑目录 locale/es/LC_MESSAGES
中的 base.po
。例如
nano base.po
您将看到以 msgid
开头然后在 msgstr ""
下的行
我的示例代码中的示例:
msgid "Welcome to the app"
msgstr ""
msgid "What is your name? "
msgstr ""
msgid "What city do you live in? "
msgstr ""
使用您最喜欢的翻译器 Ex. Google Translator 或我最喜欢的 AWS Translator。 *注意:AWS Translator 你也可以上传你的 POT 文件。
从 msgid
复制您翻译的文本并将其复制到 msgstr
我的代码示例:
msgid "Welcome to the app"
msgstr "Bienvenido a la aplicación"
msgid "What is your name? "
msgstr "¿Cuál es su nombre? "
msgid "What city do you live in? "
msgstr "¿En qué ciudad vives? "
当您在文件的 header 中编辑文件时,更改行:
Content-Type: text/plain; charset=CHARSETn
到
"Content-Type: text/plain; charset=UTF-8\n"
或任何语言的首选编码。
这是.po文件标题的参考
https://www.gnu.org/software/gettext/manual/html_node/Header-Entry.html#Header-Entry
保存您的 .po 文件
我们现在需要制作一个 .mo
文件。 .mo
文件只是一个解析的二进制文件。为此 运行 在 LC_MESSAGE
目录中的命令提示符下执行以下命令。
msgfmt base.po -o base.mo
就是这样! :)
在 main.py
所在的文本目录中,您可以通过 运行ning:
进行测试
LANGUAGE=es python3 main.py
在学习如何执行此操作时,我使用了此网站作为参考。这只是一个快速 运行 下降。我非常强调要花时间阅读以下文章,因为它深入探讨了如何使用 GetText。
https://phrase.com/blog/posts/translate-python-gnu-gettext/
*旁注:要使用 pot 文件的 AWS Translate 自动功能,说明如下: https://aws.amazon.com/blogs/machine-learning/translating-your-website-or-application-automatically-with-amazon-translate-in-your-ci-cd-pipeline/