如何在我的 Django 项目中实现基本的程序范围翻译功能?

问题描述 投票:0回答:1

我正在为我的计算机科学课程制作一些东西,这是一个在 Django 上运行的 POS 系统。这是我的仓库: https://github.com/Ashaz/django_point_of_sale

背景信息 所以基本上,程序本身并没有经过审查员的审查。但是,我需要通过录制正在使用的程序的短视频来证明我所拥有的功能正在运行。如果实际功能没有实现全部预期目的也没关系。例如,在这个程序中,它说“销售”,但因为我正在为餐饮业提供服务,所以理想情况下它会说“订单”。我被允许使用原始项目的分支。

我的问题 因此,我的项目的主要目标是让用户可以选择要翻译的语言,然后程序将页面翻译成该语言。问题是我可以在页面上包含 Google 翻译表单,但我需要进一步证明我实际上已经完成了“一些”工作,这意味着我需要使用 API 或其他东西。翻译不需要 100% 准确,但要表明已做出尝试;作为一名学生和学习科目等限制是有道理的。 我首先创建了一个新文件夹“commons”并添加了一个 utils.py 文件:

def translate_text(text, target_language='en'): url = "https://translation.googleapis.com/language/translate/v2" params = { 'q': text, 'target': target_language, 'key': settings.GOOGLE_TRANSLATE_API_KEY } response = requests.get(url, params=params) if response.status_code == 200: result = response.json() translated_text = result['data']['translations'][0]['translatedText'] return translated_text else: print("Failed to translate text.") return text

这将由我的程序的 base.html 中的表单触发:

<form action="{% url 'set_language' %}" method="post"> {% csrf_token %} <select name="language" onchange="this.form.submit()"> <option value="en">English</option> <option value="es">Español</option> </select> </form>

set_language URL 是在我的程序中的 urls.py 中声明的。

set_language函数是在我的销售模块的views.py中声明的:

@require_POST def set_language(request): language = request.POST.get('language', 'en') request.session['language'] = language return redirect(request.META.get('HTTP_REFERER', '/'))

显然 API 密钥是在我的应用程序的 settings.py 中声明的。

我很欣赏这一切都是混乱的(这一切都是新的,我们都从某个地方开始)。显示更改语言的按钮,但语言没有更改。

python html django translation point-of-sale
1个回答
0
投票
我的项目的主要目标是让用户可以选择要翻译的语言,然后程序将页面翻译成该语言。

您可以单独使用 Django 来实现此功能,而无需使用任何 API。
参考

所以,基本想法是

1.为了清楚地说明您的代码 settings.py,您定义了您想要在网站上支持的语言列表

LANGUAGES = [ ("de", _("German")), ("en", _("English")), ]

2.您定义需要翻译的文本。 (您可以通过评论添加提示)。

.py 文件示例

from django.utils.translation import gettext as _ def my_view(request): # Translators: This message appears on the home page only output = _("Welcome to my site.") return HttpResponse(output)

.html 文件示例:

<title>{% translate "This is the title." %}</title> <title>{% translate myvar %}</title>

3.使用 
django-admin makemessages -l [language code such as de for German]

收集需要翻译成特定文件的所有文本。此命令将文本收集到以 .po 扩展名结尾的文件中。
例如。

#. Translators: This message appears on the home page only # path/to/python/file.py:123 msgid "Welcome to my site." msgstr ""

4.手动将翻译写入
msgstr

引号
例如。

msgstr "welcome to my sate in German"

5.将 django 内部化(翻译)url 端点添加到您的 urls.py

urlpatterns += i18n_patterns( path("about/", about_views.main, name="about"), path("news/", include(news_patterns, namespace="news")), )

6. > 将.po文件文本编译成更高效的形式

运行

django-admin compilemessages

命令

7.将表单添加到您的 html 文件以使用户能够选择他们选择的语言。

例如。

{% load i18n %} <form action="{% url 'set_language' %}" method="post">{% csrf_token %} <input name="next" type="hidden" value="{{ redirect_to }}"> <select name="language"> {% get_current_language as LANGUAGE_CODE %} {% get_available_languages as LANGUAGES %} {% get_language_info_list for LANGUAGES as languages %} {% for language in languages %} <option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected{% endif %}> {{ language.name_local }} ({{ language.code }}) </option> {% endfor %} </select> <input type="submit" value="Go"> </form>

您可以在这里找到深入的解释

© www.soinside.com 2019 - 2024. All rights reserved.