我正在为我的计算机科学课程制作一些东西,这是一个在 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 中声明的。
我很欣赏这一切都是混乱的(这一切都是新的,我们都从某个地方开始)。显示更改语言的按钮,但语言没有更改。
参考您可以单独使用 Django 来实现此功能,而无需使用任何 API。
1.为了清楚地说明您的代码 settings.py,您定义了您想要在网站上支持的语言列表
LANGUAGES = [
("de", _("German")),
("en", _("English")),
]
2.您定义需要翻译的文本。 (您可以通过评论添加提示)。
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]
#. 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>
您可以在这里找到深入的解释