Python 如何翻译Django日历中的星期和月份的名称
我想问一下,在Django呈现的日历中,如何将一周和一个月的日期名称从原始英语更改为例如波兰语 我试图找到一个解决方案,在设置中更改语言,但没有任何效果 我还尝试使用LocalHTMLCalendar,但没有成功 这是我的utlis.py文件Python 如何翻译Django日历中的星期和月份的名称,python,django,Python,Django,我想问一下,在Django呈现的日历中,如何将一周和一个月的日期名称从原始英语更改为例如波兰语 我试图找到一个解决方案,在设置中更改语言,但没有任何效果 我还尝试使用LocalHTMLCalendar,但没有成功 这是我的utlis.py文件 class Calendar(LocaleHTMLCalendar): def __init__(self, year=None, month=None): self.year = year translation.
class Calendar(LocaleHTMLCalendar):
def __init__(self, year=None, month=None):
self.year = year
translation.activate('pl')
self.month = month
super(Calendar, self).__init__()
# formats a day as a td
# filter events by day
def formatday(self, day, events):
events_per_day = events.filter(start_time__day=day)
d = ''
for event in events_per_day:
d += f'<li> {event.get_html_url} </li>'
if day != 0:
return f"<td><span class='date'>{day}</span><ul> {d} </ul></td>"
return '<td></td>'
# formats a week as a tr
def formatweek(self, theweek, events):
week = ''
for d, weekday in theweek:
week += self.formatday(d, events)
print()
return f'<tr> {week} </tr>'
# formats a month as a table
# filter events by year and month
def formatmonth(self, withyear=True):
events = Event.objects.filter(start_time__year=self.year, start_time__month=self.month)
cal = f'<table border="0" cellpadding="0" cellspacing="0" class="calendar">\n'
cal += f'{self.formatmonthname(self.year, self.month, withyear=withyear)}\n'
cal += f'{self.formatweekheader()}\n'
for week in self.monthdays2calendar(self.year, self.month):
cal += f'{self.formatweek(week, events)}\n'
return cal
如果您能提供任何提示,我将不胜感激。也许您可以采用下面的工作示例,并根据您的实际情况调整原则。注意翻译所需的每个字符串前面的u 然而,即使以我的例子来说,这也涉及到一些进一步的工作:
- 如果对.py代码满意,则必须为其生成.po文件(即目标语言的可编辑翻译文件);这可以通过使用gettext工具中的gettext(注意:在我的本地系统上,我为这个示例文件指定的名称是“test_i18n.py”;这个名称(但没有扩展名)也在
下面我的代码中的第行;此行中指定的名称必须与在此本地化过程中进一步生成的实际.py程序文件.mo编译语言文件的名称匹配(下面的第四个项目符号)language=gettext.translation('test_l10n',locale_path,[current_locale]中显式指定
- 必须将
行插入.po文件的头块中(例如,在“Language:xx\n”
行之后),其中xx是目标语言ID(在您的情况下是pl)“Language Team:etc.”
- 例如,使用或翻译.po条目
- 当您对翻译感到满意时,您必须从.po文件生成.mo文件(即编译的翻译文件);Poedit将自动生成此文件,但也可以使用gettext工具中的msgfmt使用
msgfmt yourfile.po-o yourfile.mo生成此文件
- 将生成的.mo文件放置(复制或移动)到与代码相关的区域设置路径中;例如,在与.py程序相同的位置上,必须存在(或生成)一个
路径,其中必须包含.mo文件(注意:'xx'是目标语言ID,.mo文件名必须与/locale/xx/LC_MESSAGES/
line)中明确指定的主.py程序文件名相匹配)language=gettext.translation('test\u l10n',locale\u path,[current\u locale]
- 运行该程序,它将显示从现在开始的本地化名称
/locale/xx/LC\u MESSAGES/
路径中.mo文件的名称必须与language=gettext.translation('test\u l10n',locale\u path,[current\u locale]
下面代码中的第行,这两个选项都可以独立于.py文件本身的名称进行选择。如果我之前造成了混淆,请原谅
这是我的示例文件test\u l10n.py:
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import datetime
import locale
import gettext
##
class l10nTest(object):
def __init__(self, *args):
pass
def Main(self):
self.get_datetime = datetime.datetime.today()
self.weekday_now = self.get_datetime.weekday()
self.temp = self.weekday_now + 1
self.dayl = self.DayOfWeekLiteral(str(self.temp))
print (_("Today is %s") % self.dayl)
def DayOfWeekLiteral(self, dday):
self.dday = dday
if int(self.dday) == 1:
self.dayl = _("Monday")
if int(self.dday) == 2:
self.dayl = _("Tuesday")
if int(self.dday) == 3:
self.dayl = _("Wednesday")
if int(self.dday) == 4:
self.dayl = _("Thursday")
if int(self.dday) == 5:
self.dayl = _("Friday")
if int(self.dday) == 6:
self.dayl = _("Saturday")
if int(self.dday) == 7:
self.dayl = _("Sunday")
return self.dayl
##
if __name__ == "__main__":
current_locale, encoding = locale.getdefaultlocale()
# or it can be forced explicitly by uncomment the line below
# current_locale = "pl"
locale_path = './locale/'
language = gettext.translation('test_l10n', locale_path, [current_locale])
language.install()
app = l10nTest(0)
app.Main()
这是我的test_l10n.po文件(在我的例子中,是罗马尼亚文):
(当时我添加了这个稍后的编辑,就当地时间而言,这已经是第二天了)
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import datetime
import locale
import gettext
##
class l10nTest(object):
def __init__(self, *args):
pass
def Main(self):
self.get_datetime = datetime.datetime.today()
self.weekday_now = self.get_datetime.weekday()
self.temp = self.weekday_now + 1
self.dayl = self.DayOfWeekLiteral(str(self.temp))
print (_("Today is %s") % self.dayl)
def DayOfWeekLiteral(self, dday):
self.dday = dday
if int(self.dday) == 1:
self.dayl = _("Monday")
if int(self.dday) == 2:
self.dayl = _("Tuesday")
if int(self.dday) == 3:
self.dayl = _("Wednesday")
if int(self.dday) == 4:
self.dayl = _("Thursday")
if int(self.dday) == 5:
self.dayl = _("Friday")
if int(self.dday) == 6:
self.dayl = _("Saturday")
if int(self.dday) == 7:
self.dayl = _("Sunday")
return self.dayl
##
if __name__ == "__main__":
current_locale, encoding = locale.getdefaultlocale()
# or it can be forced explicitly by uncomment the line below
# current_locale = "pl"
locale_path = './locale/'
language = gettext.translation('test_l10n', locale_path, [current_locale])
language.install()
app = l10nTest(0)
app.Main()
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-02 22:08+0200\n"
"PO-Revision-Date: 2021-02-02 22:09+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: ro\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.4.2\n"
#: test_l10n.py:20
#, python-format
msgid "Today is %s"
msgstr "Azi este %s"
#: test_l10n.py:25
msgid "Monday"
msgstr "luni"
#: test_l10n.py:27
msgid "Tuesday"
msgstr "marți"
#: test_l10n.py:29
msgid "Wednesday"
msgstr "miercuri"
#: test_l10n.py:31
msgid "Thursday"
msgstr "joi"
#: test_l10n.py:33
msgid "Friday"
msgstr "vineri"
#: test_l10n.py:35
msgid "Saturday"
msgstr "sâmbătă"
#: test_l10n.py:37
msgid "Sunday"
msgstr "duminică"
Azi este marți
Azi este miercuri