使用 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/