diff --git a/locale/zh_Hans/LC_MESSAGES/django.po b/locale/zh_Hans/LC_MESSAGES/django.po index 8950a0e..ee5a624 100644 --- a/locale/zh_Hans/LC_MESSAGES/django.po +++ b/locale/zh_Hans/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-05-17 03:44+0000\n" +"POT-Creation-Date: 2024-06-19 06:24+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,64 +17,64 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: core/admin.py:20 +#: core/admin.py:28 msgid "RSS Translator Admin" msgstr "RSS翻译器管理后台" -#: core/admin.py:21 +#: core/admin.py:29 msgid "RSS Translator" msgstr "RSS翻译器" -#: core/admin.py:22 +#: core/admin.py:30 msgid "Dashboard" msgstr "仪表盘" -#: core/admin.py:35 +#: core/admin.py:44 msgid "Engine" msgstr "引擎" -#: core/admin.py:39 core/admin.py:173 core/admin.py:261 +#: core/admin.py:48 core/admin.py:232 core/admin.py:371 #: templates/admin/o_feed_batch_modify.html:23 msgid "Translator" msgstr "翻译器" -#: core/admin.py:150 core/admin.py:401 +#: core/admin.py:203 core/admin.py:553 msgid "Translated Feed URL" msgstr "翻译源地址" -#: core/admin.py:158 core/admin.py:276 core/admin.py:392 +#: core/admin.py:211 core/admin.py:387 core/admin.py:546 msgid "Size(KB)" msgstr "文件大小(KB)" -#: core/admin.py:165 core/admin.py:409 +#: core/admin.py:218 core/admin.py:561 msgid "Status" msgstr "状态" -#: core/admin.py:173 +#: core/admin.py:231 msgid "Select a valid translator" msgstr "选择一个有效的翻译器" -#: core/admin.py:174 +#: core/admin.py:237 msgid "Select a valid AI engine" msgstr "选择一个有效的AI引擎" -#: core/admin.py:174 templates/admin/o_feed_batch_modify.html:41 +#: core/admin.py:238 templates/admin/o_feed_batch_modify.html:41 msgid "Summary Engine" msgstr "摘要器" -#: core/admin.py:265 +#: core/admin.py:376 msgid "Translated Language" msgstr "翻译语言" -#: core/admin.py:281 core/models.py:29 translator/models/base.py:11 +#: core/admin.py:392 core/models.py:61 translator/models/base.py:12 msgid "Valid" msgstr "验证" -#: core/admin.py:296 core/models.py:17 +#: core/admin.py:409 core/models.py:22 msgid "Feed URL" msgstr "源地址" -#: core/admin.py:372 core/admin.py:447 +#: core/admin.py:504 core/admin.py:603 msgid "Batch modification" msgstr "批量修改" @@ -82,162 +82,162 @@ msgstr "批量修改" msgid "Feed" msgstr "源" -#: core/models.py:16 translator/models/base.py:10 +#: core/models.py:20 translator/models/base.py:11 msgid "Name" msgstr "名称" -#: core/models.py:18 +#: core/models.py:26 msgid "Last Updated(UTC)" msgstr "最后更新(UTC)" -#: core/models.py:18 +#: core/models.py:31 msgid "Last updated from the original feed" msgstr "原始源的最后更新的时间" -#: core/models.py:19 +#: core/models.py:34 msgid "Last Pull(UTC)" msgstr "最后获取(UTC)" -#: core/models.py:19 +#: core/models.py:39 msgid "Last time the feed was pulled" msgstr "最后获取原始源的时间" -#: core/models.py:21 templates/admin/o_feed_batch_modify.html:36 +#: core/models.py:42 templates/admin/o_feed_batch_modify.html:36 msgid "Only Translation" msgstr "仅译文" -#: core/models.py:22 templates/admin/o_feed_batch_modify.html:37 +#: core/models.py:43 templates/admin/o_feed_batch_modify.html:37 msgid "Translation | Original" msgstr "译文 | 原文" -#: core/models.py:23 templates/admin/o_feed_batch_modify.html:38 +#: core/models.py:44 templates/admin/o_feed_batch_modify.html:38 msgid "Original | Translation" msgstr "原文 | 译文" -#: core/models.py:25 templates/admin/o_feed_batch_modify.html:32 +#: core/models.py:47 templates/admin/o_feed_batch_modify.html:32 msgid "Translation Display" msgstr "译文显示" -#: core/models.py:28 core/models.py:86 +#: core/models.py:56 core/models.py:176 msgid "Size" msgstr "文件大小" -#: core/models.py:30 templates/admin/o_feed_batch_modify.html:13 +#: core/models.py:66 templates/admin/o_feed_batch_modify.html:13 msgid "Update Frequency" msgstr "更新频率(分钟)" -#: core/models.py:30 +#: core/models.py:68 msgid "Minutes" msgstr "分钟" -#: core/models.py:31 templates/admin/o_feed_batch_modify.html:18 +#: core/models.py:71 templates/admin/o_feed_batch_modify.html:18 msgid "Max Posts" msgstr "最大条目" -#: core/models.py:31 +#: core/models.py:73 msgid "Max number of posts to be translated" msgstr "要翻译的最大帖子数" -#: core/models.py:32 templates/admin/o_feed_batch_modify.html:67 +#: core/models.py:76 templates/admin/o_feed_batch_modify.html:67 msgid "Best Quality" msgstr "最佳质量" -#: core/models.py:32 +#: core/models.py:79 msgid "" "Formatting such as hyperlinks, bold, italics, etc. will be lost for optimal " "translation quality." msgstr "获取最佳翻译质量,将会丢失超链接、加粗、斜体等格式" -#: core/models.py:33 templates/admin/o_feed_batch_modify.html:62 +#: core/models.py:83 templates/admin/o_feed_batch_modify.html:62 msgid "Fetch Original Article" msgstr "获取全文" -#: core/models.py:33 +#: core/models.py:85 msgid "Fetch original article from the website." msgstr "从原网站获取全文" -#: core/models.py:43 templates/admin/o_feed_batch_modify.html:51 +#: core/models.py:101 templates/admin/o_feed_batch_modify.html:51 msgid "Summary Detail" msgstr "摘要细粒度" -#: core/models.py:49 +#: core/models.py:107 msgid "" "Level of detail of summaries of longer articles. 0: Normal, 1: Most detailed " "(cost more tokens)" msgstr "较长文章摘要的详细程度。0:正常,1:最详细(花费更多token)" -#: core/models.py:51 templates/admin/o_feed_batch_modify.html:56 +#: core/models.py:112 templates/admin/o_feed_batch_modify.html:56 msgid "Addtional Prompt" msgstr "额外的提示词" -#: core/models.py:51 +#: core/models.py:116 msgid "Addtional Prompt for translation and summary" msgstr "用于AI翻译和摘要(可选)" -#: core/models.py:52 +#: core/models.py:119 msgid "Enter a category string" msgstr "输入类别" -#: core/models.py:58 core/models.py:75 +#: core/models.py:126 core/models.py:153 msgid "Original Feed" msgstr "原始源" -#: core/models.py:59 +#: core/models.py:127 msgid "Original Feeds" msgstr "原始源" -#: core/models.py:73 +#: core/models.py:142 msgid "URL Slug(Optional)" msgstr "URL别名(可选)" -#: core/models.py:73 +#: core/models.py:146 msgid "" "Example: if set to hacker_news, the subscription address will be " "http://127.0.0.1:8000/rss/hacker_news" msgstr "" "比如设置为'hacker_news',则订阅地址为'http://127.0.0.1:8000/rss/hacker_news'" -#: core/models.py:74 +#: core/models.py:150 msgid "Language" msgstr "语言" -#: core/models.py:76 +#: core/models.py:156 msgid "Translation Status" msgstr "翻译状态" -#: core/models.py:78 templates/admin/t_feed_batch_modify.html:13 +#: core/models.py:161 templates/admin/t_feed_batch_modify.html:13 msgid "Translate Title" msgstr "翻译标题" -#: core/models.py:79 templates/admin/t_feed_batch_modify.html:18 +#: core/models.py:162 templates/admin/t_feed_batch_modify.html:18 msgid "Translate Content" msgstr "翻译内容" -#: core/models.py:80 templates/admin/t_feed_batch_modify.html:23 +#: core/models.py:163 templates/admin/t_feed_batch_modify.html:23 msgid "Summary" msgstr "摘要" -#: core/models.py:82 +#: core/models.py:165 msgid "Tokens Cost" msgstr "花费Token数" -#: core/models.py:83 +#: core/models.py:166 msgid "Characters Cost" msgstr "花费字符数" -#: core/models.py:85 +#: core/models.py:169 msgid "Last Modified" msgstr "最后更新" -#: core/models.py:85 +#: core/models.py:173 msgid "Last time the feed was translated" msgstr "最后翻译的时间" -#: core/models.py:91 +#: core/models.py:184 msgid "Translated Feed" msgstr "翻译源" -#: core/models.py:92 +#: core/models.py:185 msgid "Translated Feeds" msgstr "翻译源" @@ -292,1589 +292,72 @@ msgstr "类别" msgid "Which service provider you want to add?" msgstr "您想添加哪个服务提供商?" -#: translator/models/azureai.py:9 +#: translator/models/azureai.py:10 msgid "Endpoint" msgstr "" -#: translator/models/azureai.py:11 +#: translator/models/azureai.py:14 msgid "Deloyment Name" msgstr "" -#: translator/models/base.py:81 translator/models/claude.py:13 -#: translator/models/deepl.py:10 translator/models/gemini.py:14 -#: translator/models/microsoft_translate.py:11 +#: translator/models/base.py:88 translator/models/claude.py:18 +#: translator/models/deepl.py:11 translator/models/gemini.py:15 +#: translator/models/microsoft_translate.py:12 msgid "API Key" msgstr "" -#: translator/models/base.py:82 translator/models/claude.py:15 -#: translator/models/groq.py:7 translator/models/moonshotai.py:7 -#: translator/models/openrouterai.py:7 translator/models/togetherai.py:7 +#: translator/models/base.py:89 translator/models/claude.py:20 +#: translator/models/groq.py:8 translator/models/moonshotai.py:8 +#: translator/models/openrouterai.py:8 translator/models/togetherai.py:8 msgid "API URL" msgstr "" -#: translator/models/base.py:84 translator/models/claude.py:16 -#: translator/models/gemini.py:16 +#: translator/models/base.py:96 translator/models/claude.py:22 +#: translator/models/gemini.py:22 msgid "Title Translate Prompt" msgstr "标题翻译提示词" -#: translator/models/base.py:85 translator/models/claude.py:17 -#: translator/models/gemini.py:17 +#: translator/models/base.py:99 translator/models/claude.py:25 +#: translator/models/gemini.py:25 msgid "Content Translate Prompt" msgstr "内容翻译提示词" -#: translator/models/claude.py:19 translator/models/deepl.py:13 -#: translator/models/deeplweb.py:12 -#: translator/models/google_translate_web.py:10 +#: translator/models/claude.py:28 translator/models/deepl.py:14 +#: translator/models/deeplweb.py:13 translator/models/free_translators.py:12 +#: translator/models/google_translate_web.py:14 msgid "Proxy(optional)" msgstr "" -#: translator/models/deepl.py:12 +#: translator/models/deepl.py:13 msgid "API URL(optional)" msgstr "" -#: translator/models/deeplweb.py:11 translator/models/deeplx.py:13 -#: translator/models/dev.py:11 translator/models/gemini.py:23 -#: translator/models/google_translate_web.py:11 +#: translator/models/deeplweb.py:12 translator/models/deeplx.py:16 +#: translator/models/dev.py:11 translator/models/gemini.py:32 +#: translator/models/google_translate_web.py:15 msgid "Request Interval(s)" msgstr "请求间隔" -#: translator/models/google_translate_web.py:9 -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:2628 +#: translator/models/google_translate_web.py:12 msgid "URL" msgstr "" -#: utils/modelAdmin_utils.py:36 utils/modelAdmin_utils.py:53 +#: translator/models/google_translate_web.py:12 +msgid "" +"It is recommended to leave this blank in order to automatically select the " +"best server" +msgstr "建议留空,以自动选择最佳服务器" + +#: utils/modelAdmin_utils.py:46 utils/modelAdmin_utils.py:74 msgid "Export selected feeds as OPML" msgstr "导出为 OPML" -#: utils/modelAdmin_utils.py:64 utils/modelAdmin_utils.py:75 +#: utils/modelAdmin_utils.py:88 utils/modelAdmin_utils.py:102 msgid "Force update" msgstr "强制更新" -#: venv/lib/python3.10/site-packages/click/_termui_impl.py:518 -#, python-brace-format -msgid "{editor}: Editing failed" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/_termui_impl.py:522 -#, python-brace-format -msgid "{editor}: Editing failed: {e}" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/core.py:1120 -msgid "Aborted!" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/core.py:1309 -#: venv/lib/python3.10/site-packages/click/decorators.py:559 -msgid "Show this message and exit." -msgstr "" - -#: venv/lib/python3.10/site-packages/click/core.py:1340 -#: venv/lib/python3.10/site-packages/click/core.py:1370 -#, python-brace-format -msgid "(Deprecated) {text}" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/core.py:1387 -msgid "Options" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/core.py:1413 -#, python-brace-format -msgid "Got unexpected extra argument ({args})" -msgid_plural "Got unexpected extra arguments ({args})" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.10/site-packages/click/core.py:1429 -msgid "DeprecationWarning: The command {name!r} is deprecated." -msgstr "" - -#: venv/lib/python3.10/site-packages/click/core.py:1636 -msgid "Commands" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/core.py:1668 -msgid "Missing command." -msgstr "" - -#: venv/lib/python3.10/site-packages/click/core.py:1746 -msgid "No such command {name!r}." -msgstr "" - -#: venv/lib/python3.10/site-packages/click/core.py:2310 -msgid "Value must be an iterable." -msgstr "" - -#: venv/lib/python3.10/site-packages/click/core.py:2331 -#, python-brace-format -msgid "Takes {nargs} values but 1 was given." -msgid_plural "Takes {nargs} values but {len} were given." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.10/site-packages/click/core.py:2778 -#, python-brace-format -msgid "env var: {var}" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/core.py:2808 -msgid "(dynamic)" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/core.py:2821 -#, python-brace-format -msgid "default: {default}" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/core.py:2834 -msgid "required" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/decorators.py:465 -#, python-format -msgid "%(prog)s, version %(version)s" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/decorators.py:528 -msgid "Show the version and exit." -msgstr "" - -#: venv/lib/python3.10/site-packages/click/exceptions.py:44 -#: venv/lib/python3.10/site-packages/click/exceptions.py:80 -#, python-brace-format -msgid "Error: {message}" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/exceptions.py:72 -#, python-brace-format -msgid "Try '{command} {option}' for help." -msgstr "" - -#: venv/lib/python3.10/site-packages/click/exceptions.py:121 -#, python-brace-format -msgid "Invalid value: {message}" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/exceptions.py:123 -#, python-brace-format -msgid "Invalid value for {param_hint}: {message}" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/exceptions.py:179 -msgid "Missing argument" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/exceptions.py:181 -msgid "Missing option" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/exceptions.py:183 -msgid "Missing parameter" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/exceptions.py:185 -#, python-brace-format -msgid "Missing {param_type}" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/exceptions.py:192 -#, python-brace-format -msgid "Missing parameter: {param_name}" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/exceptions.py:212 -#, python-brace-format -msgid "No such option: {name}" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/exceptions.py:224 -#, python-brace-format -msgid "Did you mean {possibility}?" -msgid_plural "(Possible options: {possibilities})" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.10/site-packages/click/exceptions.py:262 -msgid "unknown error" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/exceptions.py:269 -msgid "Could not open file {filename!r}: {message}" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/parser.py:231 -msgid "Argument {name!r} takes {nargs} values." -msgstr "" - -#: venv/lib/python3.10/site-packages/click/parser.py:413 -msgid "Option {name!r} does not take a value." -msgstr "" - -#: venv/lib/python3.10/site-packages/click/parser.py:474 -msgid "Option {name!r} requires an argument." -msgid_plural "Option {name!r} requires {nargs} arguments." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.10/site-packages/click/shell_completion.py:319 -msgid "Shell completion is not supported for Bash versions older than 4.4." -msgstr "" - -#: venv/lib/python3.10/site-packages/click/shell_completion.py:326 -msgid "Couldn't detect Bash version, shell completion is not supported." -msgstr "" - -#: venv/lib/python3.10/site-packages/click/termui.py:158 -msgid "Repeat for confirmation" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/termui.py:174 -msgid "Error: The value you entered was invalid." -msgstr "" - -#: venv/lib/python3.10/site-packages/click/termui.py:176 -#, python-brace-format -msgid "Error: {e.message}" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/termui.py:187 -msgid "Error: The two entered values do not match." -msgstr "" - -#: venv/lib/python3.10/site-packages/click/termui.py:243 -msgid "Error: invalid input" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/termui.py:773 -msgid "Press any key to continue..." -msgstr "" - -#: venv/lib/python3.10/site-packages/click/types.py:266 -#, python-brace-format -msgid "" -"Choose from:\n" -"\t{choices}" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/types.py:298 -msgid "{value!r} is not {choice}." -msgid_plural "{value!r} is not one of {choices}." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.10/site-packages/click/types.py:392 -msgid "{value!r} does not match the format {format}." -msgid_plural "{value!r} does not match the formats {formats}." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.10/site-packages/click/types.py:414 -msgid "{value!r} is not a valid {number_type}." -msgstr "" - -#: venv/lib/python3.10/site-packages/click/types.py:470 -#, python-brace-format -msgid "{value} is not in the range {range}." -msgstr "" - -#: venv/lib/python3.10/site-packages/click/types.py:611 -msgid "{value!r} is not a valid boolean." -msgstr "" - -#: venv/lib/python3.10/site-packages/click/types.py:635 -msgid "{value!r} is not a valid UUID." -msgstr "" - -#: venv/lib/python3.10/site-packages/click/types.py:822 -msgid "file" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/types.py:824 -msgid "directory" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/types.py:826 -msgid "path" -msgstr "" - -#: venv/lib/python3.10/site-packages/click/types.py:877 -msgid "{name} {filename!r} does not exist." -msgstr "" - -#: venv/lib/python3.10/site-packages/click/types.py:886 -msgid "{name} {filename!r} is a file." -msgstr "" - -#: venv/lib/python3.10/site-packages/click/types.py:894 -#, python-brace-format -msgid "{name} '{filename}' is a directory." -msgstr "" - -#: venv/lib/python3.10/site-packages/click/types.py:903 -msgid "{name} {filename!r} is not readable." -msgstr "" - -#: venv/lib/python3.10/site-packages/click/types.py:912 -msgid "{name} {filename!r} is not writable." -msgstr "" - -#: venv/lib/python3.10/site-packages/click/types.py:921 -msgid "{name} {filename!r} is not executable." -msgstr "" - -#: venv/lib/python3.10/site-packages/click/types.py:988 -#, python-brace-format -msgid "{len_type} values are required, but {len_value} was given." -msgid_plural "{len_type} values are required, but {len_value} were given." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.10/site-packages/django/contrib/messages/apps.py:16 -msgid "Messages" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/contrib/sitemaps/apps.py:8 -msgid "Site Maps" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/contrib/staticfiles/apps.py:9 -msgid "Static Files" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/contrib/syndication/apps.py:7 -msgid "Syndication" -msgstr "" - -#. Translators: String used to replace omitted page numbers in elided page -#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. -#: venv/lib/python3.10/site-packages/django/core/paginator.py:30 -msgid "…" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/core/paginator.py:32 -msgid "That page number is not an integer" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/core/paginator.py:33 -msgid "That page number is less than 1" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/core/paginator.py:34 -msgid "That page contains no results" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/core/validators.py:22 -msgid "Enter a valid value." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/core/validators.py:104 -#: venv/lib/python3.10/site-packages/django/forms/fields.py:760 -msgid "Enter a valid URL." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/core/validators.py:165 -msgid "Enter a valid integer." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/core/validators.py:176 -msgid "Enter a valid email address." -msgstr "" - -#. Translators: "letters" means latin letters: a-z and A-Z. -#: venv/lib/python3.10/site-packages/django/core/validators.py:259 -msgid "" -"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/core/validators.py:267 -msgid "" -"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " -"hyphens." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/core/validators.py:279 -#: venv/lib/python3.10/site-packages/django/core/validators.py:306 -msgid "Enter a valid IPv4 address." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/core/validators.py:286 -#: venv/lib/python3.10/site-packages/django/core/validators.py:307 -msgid "Enter a valid IPv6 address." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/core/validators.py:298 -#: venv/lib/python3.10/site-packages/django/core/validators.py:305 -msgid "Enter a valid IPv4 or IPv6 address." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/core/validators.py:341 -msgid "Enter only digits separated by commas." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/core/validators.py:347 -#, python-format -msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/core/validators.py:382 -#, python-format -msgid "Ensure this value is less than or equal to %(limit_value)s." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/core/validators.py:391 -#, python-format -msgid "Ensure this value is greater than or equal to %(limit_value)s." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/core/validators.py:400 -#, python-format -msgid "Ensure this value is a multiple of step size %(limit_value)s." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/core/validators.py:407 -#, python-format -msgid "" -"Ensure this value is a multiple of step size %(limit_value)s, starting from " -"%(offset)s, e.g. %(offset)s, %(valid_value1)s, %(valid_value2)s, and so on." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/core/validators.py:439 -#, python-format -msgid "" -"Ensure this value has at least %(limit_value)d character (it has " -"%(show_value)d)." -msgid_plural "" -"Ensure this value has at least %(limit_value)d characters (it has " -"%(show_value)d)." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.10/site-packages/django/core/validators.py:457 -#, python-format -msgid "" -"Ensure this value has at most %(limit_value)d character (it has " -"%(show_value)d)." -msgid_plural "" -"Ensure this value has at most %(limit_value)d characters (it has " -"%(show_value)d)." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.10/site-packages/django/core/validators.py:480 -#: venv/lib/python3.10/site-packages/django/forms/fields.py:355 -#: venv/lib/python3.10/site-packages/django/forms/fields.py:394 -msgid "Enter a number." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/core/validators.py:482 -#, python-format -msgid "Ensure that there are no more than %(max)s digit in total." -msgid_plural "Ensure that there are no more than %(max)s digits in total." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.10/site-packages/django/core/validators.py:487 -#, python-format -msgid "Ensure that there are no more than %(max)s decimal place." -msgid_plural "Ensure that there are no more than %(max)s decimal places." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.10/site-packages/django/core/validators.py:492 -#, python-format -msgid "" -"Ensure that there are no more than %(max)s digit before the decimal point." -msgid_plural "" -"Ensure that there are no more than %(max)s digits before the decimal point." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.10/site-packages/django/core/validators.py:563 -#, python-format -msgid "" -"File extension “%(extension)s” is not allowed. Allowed extensions are: " -"%(allowed_extensions)s." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/core/validators.py:624 -msgid "Null characters are not allowed." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/base.py:1477 -#: venv/lib/python3.10/site-packages/django/forms/models.py:906 -msgid "and" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/base.py:1479 -#, python-format -msgid "%(model_name)s with this %(field_labels)s already exists." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/constraints.py:20 -#, python-format -msgid "Constraint “%(name)s” is violated." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:133 -#, python-format -msgid "Value %(value)r is not a valid choice." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:134 -msgid "This field cannot be null." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:135 -msgid "This field cannot be blank." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:136 -#, python-format -msgid "%(model_name)s with this %(field_label)s already exists." -msgstr "" - -#. Translators: The 'lookup_type' is one of 'date', 'year' or -#. 'month'. Eg: "Title must be unique for pub_date year" -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:140 -#, python-format -msgid "" -"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:179 -#, python-format -msgid "Field of type: %(field_type)s" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:1155 -#, python-format -msgid "“%(value)s” value must be either True or False." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:1156 -#, python-format -msgid "“%(value)s” value must be either True, False, or None." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:1158 -msgid "Boolean (Either True or False)" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:1208 -#, python-format -msgid "String (up to %(max_length)s)" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:1210 -msgid "String (unlimited)" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:1314 -msgid "Comma-separated integers" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:1415 -#, python-format -msgid "" -"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " -"format." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:1419 -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:1554 -#, python-format -msgid "" -"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " -"date." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:1423 -msgid "Date (without time)" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:1550 -#, python-format -msgid "" -"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." -"uuuuuu]][TZ] format." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:1558 -#, python-format -msgid "" -"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" -"[TZ]) but it is an invalid date/time." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:1563 -msgid "Date (with time)" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:1690 -#, python-format -msgid "“%(value)s” value must be a decimal number." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:1692 -msgid "Decimal number" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:1853 -#, python-format -msgid "" -"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." -"uuuuuu] format." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:1857 -msgid "Duration" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:1909 -msgid "Email address" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:1934 -msgid "File path" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:2012 -#, python-format -msgid "“%(value)s” value must be a float." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:2014 -msgid "Floating point number" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:2054 -#, python-format -msgid "“%(value)s” value must be an integer." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:2056 -msgid "Integer" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:2152 -msgid "Big (8 byte) integer" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:2169 -msgid "Small integer" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:2177 -msgid "IPv4 address" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:2208 -msgid "IP address" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:2301 -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:2302 -#, python-format -msgid "“%(value)s” value must be either None, True or False." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:2304 -msgid "Boolean (Either True, False or None)" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:2355 -msgid "Positive big integer" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:2370 -msgid "Positive integer" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:2385 -msgid "Positive small integer" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:2401 -#, python-format -msgid "Slug (up to %(max_length)s)" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:2437 -msgid "Text" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:2512 -#, python-format -msgid "" -"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " -"format." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:2516 -#, python-format -msgid "" -"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " -"invalid time." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:2520 -msgid "Time" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:2652 -msgid "Raw binary data" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:2717 -#, python-format -msgid "“%(value)s” is not a valid UUID." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py:2719 -msgid "Universally unique identifier" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/files.py:232 -msgid "File" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/files.py:393 -msgid "Image" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/json.py:26 -msgid "A JSON object" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/json.py:28 -msgid "Value must be valid JSON." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/related.py:939 -#, python-format -msgid "%(model)s instance with %(field)s %(value)r does not exist." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/related.py:941 -msgid "Foreign Key (type determined by related field)" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/related.py:1235 -msgid "One-to-one relationship" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/related.py:1292 -#, python-format -msgid "%(from)s-%(to)s relationship" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/related.py:1294 -#, python-format -msgid "%(from)s-%(to)s relationships" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/db/models/fields/related.py:1342 -msgid "Many-to-many relationship" -msgstr "" - -#. Translators: If found as last label character, these punctuation -#. characters will prevent the default label_suffix to be appended to the label -#: venv/lib/python3.10/site-packages/django/forms/boundfield.py:185 -msgid ":?.!" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/fields.py:95 -msgid "This field is required." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/fields.py:304 -msgid "Enter a whole number." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/fields.py:475 -#: venv/lib/python3.10/site-packages/django/forms/fields.py:1252 -msgid "Enter a valid date." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/fields.py:498 -#: venv/lib/python3.10/site-packages/django/forms/fields.py:1253 -msgid "Enter a valid time." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/fields.py:525 -msgid "Enter a valid date/time." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/fields.py:559 -msgid "Enter a valid duration." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/fields.py:560 -#, python-brace-format -msgid "The number of days must be between {min_days} and {max_days}." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/fields.py:629 -msgid "No file was submitted. Check the encoding type on the form." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/fields.py:630 -msgid "No file was submitted." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/fields.py:631 -msgid "The submitted file is empty." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/fields.py:633 -#, python-format -msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." -msgid_plural "" -"Ensure this filename has at most %(max)d characters (it has %(length)d)." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.10/site-packages/django/forms/fields.py:638 -msgid "Please either submit a file or check the clear checkbox, not both." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/fields.py:702 -msgid "" -"Upload a valid image. The file you uploaded was either not an image or a " -"corrupted image." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/fields.py:874 -#: venv/lib/python3.10/site-packages/django/forms/fields.py:960 -#: venv/lib/python3.10/site-packages/django/forms/models.py:1585 -#, python-format -msgid "Select a valid choice. %(value)s is not one of the available choices." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/fields.py:962 -#: venv/lib/python3.10/site-packages/django/forms/fields.py:1081 -#: venv/lib/python3.10/site-packages/django/forms/models.py:1583 -msgid "Enter a list of values." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/fields.py:1082 -msgid "Enter a complete value." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/fields.py:1321 -msgid "Enter a valid UUID." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/fields.py:1351 -msgid "Enter a valid JSON." -msgstr "" - -#. Translators: This is the default suffix added to form field labels -#: venv/lib/python3.10/site-packages/django/forms/forms.py:94 -msgid ":" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/forms.py:231 -#, python-format -msgid "(Hidden field %(name)s) %(error)s" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/formsets.py:61 -#, python-format -msgid "" -"ManagementForm data is missing or has been tampered with. Missing fields: " -"%(field_names)s. You may need to file a bug report if the issue persists." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/formsets.py:65 -#, python-format -msgid "Please submit at most %(num)d form." -msgid_plural "Please submit at most %(num)d forms." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.10/site-packages/django/forms/formsets.py:70 -#, python-format -msgid "Please submit at least %(num)d form." -msgid_plural "Please submit at least %(num)d forms." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.10/site-packages/django/forms/formsets.py:484 -#: venv/lib/python3.10/site-packages/django/forms/formsets.py:491 -msgid "Order" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/formsets.py:499 -msgid "Delete" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/models.py:899 -#, python-format -msgid "Please correct the duplicate data for %(field)s." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/models.py:904 -#, python-format -msgid "Please correct the duplicate data for %(field)s, which must be unique." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/models.py:911 -#, python-format -msgid "" -"Please correct the duplicate data for %(field_name)s which must be unique " -"for the %(lookup)s in %(date_field)s." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/models.py:920 -msgid "Please correct the duplicate values below." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/models.py:1357 -msgid "The inline value did not match the parent instance." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/models.py:1448 -msgid "Select a valid choice. That choice is not one of the available choices." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/models.py:1587 -#, python-format -msgid "“%(pk)s” is not a valid value." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/utils.py:227 -#, python-format -msgid "" -"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " -"may be ambiguous or it may not exist." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/widgets.py:461 -msgid "Clear" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/widgets.py:462 -msgid "Currently" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/widgets.py:463 -msgid "Change" -msgstr "修改" - -#: venv/lib/python3.10/site-packages/django/forms/widgets.py:800 -msgid "Unknown" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/widgets.py:801 -msgid "Yes" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/forms/widgets.py:802 -msgid "No" -msgstr "" - -#. Translators: Please do not add spaces around commas. -#: venv/lib/python3.10/site-packages/django/template/defaultfilters.py:876 -msgid "yes,no,maybe" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/template/defaultfilters.py:906 -#: venv/lib/python3.10/site-packages/django/template/defaultfilters.py:923 -#, python-format -msgid "%(size)d byte" -msgid_plural "%(size)d bytes" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.10/site-packages/django/template/defaultfilters.py:925 -#, python-format -msgid "%s KB" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/template/defaultfilters.py:927 -#, python-format -msgid "%s MB" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/template/defaultfilters.py:929 -#, python-format -msgid "%s GB" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/template/defaultfilters.py:931 -#, python-format -msgid "%s TB" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/template/defaultfilters.py:933 -#, python-format -msgid "%s PB" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dateformat.py:74 -msgid "p.m." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dateformat.py:75 -msgid "a.m." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dateformat.py:80 -msgid "PM" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dateformat.py:81 -msgid "AM" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dateformat.py:153 -msgid "midnight" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dateformat.py:155 -msgid "noon" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:7 -msgid "Monday" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:8 -msgid "Tuesday" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:9 -msgid "Wednesday" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:10 -msgid "Thursday" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:11 -msgid "Friday" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:12 -msgid "Saturday" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:13 -msgid "Sunday" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:16 -msgid "Mon" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:17 -msgid "Tue" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:18 -msgid "Wed" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:19 -msgid "Thu" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:20 -msgid "Fri" -msgstr "" - - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:22 -msgid "Sun" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:25 -msgid "January" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:26 -msgid "February" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:27 -msgid "March" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:28 -msgid "April" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:29 -msgid "May" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:30 -msgid "June" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:31 -msgid "July" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:32 -msgid "August" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:33 -msgid "September" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:34 -msgid "October" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:35 -msgid "November" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:36 -msgid "December" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:39 -msgid "jan" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:40 -msgid "feb" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:42 -msgid "apr" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:44 -msgid "jun" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:45 -msgid "jul" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:46 -msgid "aug" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:47 -msgid "sep" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:48 -msgid "oct" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:49 -msgid "nov" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:50 -msgid "dec" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:53 -msgctxt "abbrev. month" -msgid "Jan." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:54 -msgctxt "abbrev. month" -msgid "Feb." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:55 -msgctxt "abbrev. month" -msgid "March" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:56 -msgctxt "abbrev. month" -msgid "April" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:57 -msgctxt "abbrev. month" -msgid "May" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:58 -msgctxt "abbrev. month" -msgid "June" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:59 -msgctxt "abbrev. month" -msgid "July" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:60 -msgctxt "abbrev. month" -msgid "Aug." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:61 -msgctxt "abbrev. month" -msgid "Sept." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:62 -msgctxt "abbrev. month" -msgid "Oct." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:63 -msgctxt "abbrev. month" -msgid "Nov." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:64 -msgctxt "abbrev. month" -msgid "Dec." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:67 -msgctxt "alt. month" -msgid "January" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:68 -msgctxt "alt. month" -msgid "February" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:69 -msgctxt "alt. month" -msgid "March" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:70 -msgctxt "alt. month" -msgid "April" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:71 -msgctxt "alt. month" -msgid "May" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:72 -msgctxt "alt. month" -msgid "June" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:73 -msgctxt "alt. month" -msgid "July" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:74 -msgctxt "alt. month" -msgid "August" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:75 -msgctxt "alt. month" -msgid "September" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:76 -msgctxt "alt. month" -msgid "October" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:77 -msgctxt "alt. month" -msgid "November" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/dates.py:78 -msgctxt "alt. month" -msgid "December" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/ipv6.py:8 -msgid "This is not a valid IPv6 address." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/text.py:123 -#, python-format -msgctxt "String to return when truncating text" -msgid "%(truncated_text)s…" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/text.py:323 -msgid "or" -msgstr "" - -#. Translators: This string is used as a separator between list elements -#: venv/lib/python3.10/site-packages/django/utils/text.py:342 -#: venv/lib/python3.10/site-packages/django/utils/timesince.py:135 -msgid ", " -msgstr "" - -#: venv/lib/python3.10/site-packages/django/utils/timesince.py:8 -#, python-format -msgid "%(num)d year" -msgid_plural "%(num)d years" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.10/site-packages/django/utils/timesince.py:9 -#, python-format -msgid "%(num)d month" -msgid_plural "%(num)d months" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.10/site-packages/django/utils/timesince.py:10 -#, python-format -msgid "%(num)d week" -msgid_plural "%(num)d weeks" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.10/site-packages/django/utils/timesince.py:11 -#, python-format -msgid "%(num)d day" -msgid_plural "%(num)d days" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.10/site-packages/django/utils/timesince.py:12 -#, python-format -msgid "%(num)d hour" -msgid_plural "%(num)d hours" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.10/site-packages/django/utils/timesince.py:13 -#, python-format -msgid "%(num)d minute" -msgid_plural "%(num)d minutes" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.10/site-packages/django/views/csrf.py:29 -msgid "Forbidden" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/csrf.py:30 -msgid "CSRF verification failed. Request aborted." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/csrf.py:34 -msgid "" -"You are seeing this message because this HTTPS site requires a “Referer " -"header” to be sent by your web browser, but none was sent. This header is " -"required for security reasons, to ensure that your browser is not being " -"hijacked by third parties." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/csrf.py:40 -msgid "" -"If you have configured your browser to disable “Referer” headers, please re-" -"enable them, at least for this site, or for HTTPS connections, or for “same-" -"origin” requests." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/csrf.py:45 -msgid "" -"If you are using the tag or " -"including the “Referrer-Policy: no-referrer” header, please remove them. The " -"CSRF protection requires the “Referer” header to do strict referer checking. " -"If you’re concerned about privacy, use alternatives like for links to third-party sites." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/csrf.py:54 -msgid "" -"You are seeing this message because this site requires a CSRF cookie when " -"submitting forms. This cookie is required for security reasons, to ensure " -"that your browser is not being hijacked by third parties." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/csrf.py:60 -msgid "" -"If you have configured your browser to disable cookies, please re-enable " -"them, at least for this site, or for “same-origin” requests." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/csrf.py:66 -msgid "More information is available with DEBUG=True." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/generic/dates.py:44 -msgid "No year specified" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/generic/dates.py:64 -#: venv/lib/python3.10/site-packages/django/views/generic/dates.py:115 -#: venv/lib/python3.10/site-packages/django/views/generic/dates.py:214 -msgid "Date out of range" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/generic/dates.py:94 -msgid "No month specified" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/generic/dates.py:147 -msgid "No day specified" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/generic/dates.py:194 -msgid "No week specified" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/generic/dates.py:349 -#: venv/lib/python3.10/site-packages/django/views/generic/dates.py:380 -#, python-format -msgid "No %(verbose_name_plural)s available" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/generic/dates.py:652 -#, python-format -msgid "" -"Future %(verbose_name_plural)s not available because %(class_name)s." -"allow_future is False." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/generic/dates.py:692 -#, python-format -msgid "Invalid date string “%(datestr)s” given format “%(format)s”" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/generic/detail.py:56 -#, python-format -msgid "No %(verbose_name)s found matching the query" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/generic/list.py:70 -msgid "Page is not “last”, nor can it be converted to an int." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/generic/list.py:77 -#, python-format -msgid "Invalid page (%(page_number)s): %(message)s" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/generic/list.py:169 -#, python-format -msgid "Empty list and “%(class_name)s.allow_empty” is False." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/static.py:49 -msgid "Directory indexes are not allowed here." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/static.py:51 -#, python-format -msgid "“%(path)s” does not exist" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/static.py:68 -#: venv/lib/python3.10/site-packages/django/views/templates/directory_index.html:8 -#: venv/lib/python3.10/site-packages/django/views/templates/directory_index.html:11 -#, python-format -msgid "Index of %(directory)s" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/templates/default_urlconf.html:7 -#: venv/lib/python3.10/site-packages/django/views/templates/default_urlconf.html:220 -msgid "The install worked successfully! Congratulations!" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/templates/default_urlconf.html:206 -#, python-format -msgid "" -"View release notes for Django %(version)s" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/templates/default_urlconf.html:221 -#, python-format -msgid "" -"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " -"URLs." -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/templates/default_urlconf.html:229 -msgid "Django Documentation" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/templates/default_urlconf.html:230 -msgid "Topics, references, & how-to’s" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/templates/default_urlconf.html:238 -msgid "Tutorial: A Polling App" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/templates/default_urlconf.html:239 -msgid "Get started with Django" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/templates/default_urlconf.html:247 -msgid "Django Community" -msgstr "" - -#: venv/lib/python3.10/site-packages/django/views/templates/default_urlconf.html:248 -msgid "Connect, get help, or contribute" -msgstr "" - -#: venv/lib/python3.10/site-packages/httplib2/__init__.py:408 -#, python-format -msgid "Content purported to be compressed with %s but failed to decompress." -msgstr "" - -#: venv/lib/python3.10/site-packages/httplib2/__init__.py:572 -#, python-format -msgid "Unsupported value for qop: %s." -msgstr "" - -#: venv/lib/python3.10/site-packages/httplib2/__init__.py:576 -#: venv/lib/python3.10/site-packages/httplib2/__init__.py:654 -#, python-format -msgid "Unsupported value for algorithm: %s." -msgstr "" - -#: venv/lib/python3.10/site-packages/httplib2/__init__.py:649 -msgid "The challenge doesn't contain a server nonce, or this one is empty." -msgstr "" - -#: venv/lib/python3.10/site-packages/httplib2/__init__.py:659 -#, python-format -msgid "Unsupported value for pw-algorithm: %s." -msgstr "" - -#: venv/lib/python3.10/site-packages/httplib2/__init__.py:1468 -msgid "Redirected but the response is missing a Location: header." -msgstr "" - -#: venv/lib/python3.10/site-packages/tagulous/forms.py:188 -msgid "Tag field could not prepare unexpected value" -msgstr "" - -#: venv/lib/python3.10/site-packages/tagulous/forms.py:256 -#, python-format -msgid "%s" -msgstr "" - -#: venv/lib/python3.10/site-packages/tagulous/templates/tagulous/admin/merge_tags.html:6 -msgid "Home" -msgstr "" - -#: venv/lib/python3.10/site-packages/tagulous/templates/tagulous/admin/merge_tags.html:9 -msgid "Merge" -msgstr "" +#~ msgid "Change" +#~ msgstr "修改" #~ msgid "Tags" #~ msgstr "标签" diff --git a/requirements/dev.txt b/requirements/dev.txt index 8945e28..a2e74cc 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -30,3 +30,6 @@ google-generativeai #django-taggit #django-tagulous git+https://github.com/versun/django-tagulous2 +easytranslator +translators +langdetect diff --git a/requirements/prod.txt b/requirements/prod.txt index 6eef763..f44b902 100644 --- a/requirements/prod.txt +++ b/requirements/prod.txt @@ -28,3 +28,6 @@ google-generativeai #django-taggit #django-tagulous git+https://github.com/versun/django-tagulous2 +easytranslator +translators +langdetect diff --git a/translator/admin.py b/translator/admin.py index 7c81eea..c8d58d8 100644 --- a/translator/admin.py +++ b/translator/admin.py @@ -322,6 +322,18 @@ class GroqTranslatorAdmin(BaseTranslatorAdmin): "base_url", ] +class FreeTranslatorsAdmin(BaseTranslatorAdmin): + fields = [ + "name", + "proxies", + "max_characters", + ] + list_display = [ + "name", + "is_valid", + "proxies", + ] + class Translated_ContentAdmin(admin.ModelAdmin): fields = [ @@ -367,6 +379,7 @@ class TestTranslatorAdmin(BaseTranslatorAdmin): core_admin_site.register(TogetherAITranslator, TogetherAITranslatorAdmin) core_admin_site.register(OpenRouterAITranslator, OpenRouterAITranslatorAdmin) core_admin_site.register(GroqTranslator, GroqTranslatorAdmin) +core_admin_site.register(FreeTranslators, FreeTranslatorsAdmin) if settings.DEBUG: core_admin_site.register(Translated_Content, Translated_ContentAdmin) diff --git a/translator/migrations/0035_freetranslators.py b/translator/migrations/0035_freetranslators.py new file mode 100644 index 0000000..2c0605c --- /dev/null +++ b/translator/migrations/0035_freetranslators.py @@ -0,0 +1,29 @@ +# Generated by Django 5.0.6 on 2024-06-19 01:05 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('translator', '0034_rename_new_hash_translated_content_hash'), + ] + + operations = [ + migrations.CreateModel( + name='FreeTranslators', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100, unique=True, verbose_name='Name')), + ('valid', models.BooleanField(null=True, verbose_name='Valid')), + ('is_ai', models.BooleanField(default=False, editable=False)), + ('translators', models.TextField(blank=True, default='', null=True)), + ('proxies', models.URLField(blank=True, default=None, help_text='e.g. http://127.0.0.1:7890, https://127.0.0.1:1080', null=True, verbose_name='Proxy(optional)')), + ('max_characters', models.IntegerField(default=5000)), + ], + options={ + 'verbose_name': 'Free Translators', + 'verbose_name_plural': 'Free Translators', + }, + ), + ] diff --git a/translator/migrations/0036_alter_googletranslatewebtranslator_base_url_and_more.py b/translator/migrations/0036_alter_googletranslatewebtranslator_base_url_and_more.py new file mode 100644 index 0000000..2f58490 --- /dev/null +++ b/translator/migrations/0036_alter_googletranslatewebtranslator_base_url_and_more.py @@ -0,0 +1,23 @@ +# Generated by Django 5.0.6 on 2024-06-19 05:09 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('translator', '0035_freetranslators'), + ] + + operations = [ + migrations.AlterField( + model_name='googletranslatewebtranslator', + name='base_url', + field=models.URLField(blank=True, help_text='It is recommended to leave this blank in order to automatically select the best server', null=True, verbose_name='URL'), + ), + migrations.AlterField( + model_name='googletranslatewebtranslator', + name='interval', + field=models.IntegerField(default=1, verbose_name='Request Interval(s)'), + ), + ] diff --git a/translator/models/__init__.py b/translator/models/__init__.py index a0bc7ec..9e6b5e5 100644 --- a/translator/models/__init__.py +++ b/translator/models/__init__.py @@ -13,6 +13,6 @@ from .togetherai import TogetherAITranslator from .openrouterai import OpenRouterAITranslator from .groq import GroqTranslator - +from .free_translators import FreeTranslators from .dev import TestTranslator diff --git a/translator/models/free_translators.py b/translator/models/free_translators.py new file mode 100644 index 0000000..c5e244c --- /dev/null +++ b/translator/models/free_translators.py @@ -0,0 +1,59 @@ +from .base import TranslatorEngine +import logging +from django.db import models +from django.utils.translation import gettext_lazy as _ +from easytranslator import EasyTranslator +from langdetect import detect + + +class FreeTranslators(TranslatorEngine): + translators = models.TextField(null=True, blank=True, default="") # list[dict] + proxies = models.URLField( + _("Proxy(optional)"), + null=True, + blank=True, + default=None, + help_text=("e.g. http://127.0.0.1:7890, https://127.0.0.1:1080"), + ) + max_characters = models.IntegerField(default=5000) + + class Meta: + verbose_name = "Free Translators" + verbose_name_plural = "Free Translators" + + def _init(self): + # if not self.translators: + # self.translators = [] + return EasyTranslator(translators=[], top_n=10) + + def validate(self) -> bool: + return True + + def translate(self, text: str, target_language: str, source_language:str="auto", **kwargs) -> dict: + et = self._init() + source_language = detect(text) if source_language == "auto" else source_language + results = et.translate( + text=text, dest_lang=target_language, src_lang=source_language, proxies=self.proxies + ) + + translated_text = ( + results.get("translated_text") if results.get("status") == "success" else "" + ) + return {"text": translated_text, "characters": len(text)} + + def translate_batch(self, text_list: list, target_language: str, **kwargs) -> dict: + et = self._init() + results = et.translate_batch( + text_list=text_list, dest_lang=target_language, proxies=self.proxies + ) + + return results + """ + { + original_text: { + "translated_text": "...", + "status": "success" / "error" + "error_info": error info if got error + } + } + """ diff --git a/translator/models/google_translate_web.py b/translator/models/google_translate_web.py index a08348c..2620078 100644 --- a/translator/models/google_translate_web.py +++ b/translator/models/google_translate_web.py @@ -4,14 +4,15 @@ import logging from django.db import models from django.utils.translation import gettext_lazy as _ +import translators as ts class GoogleTranslateWebTranslator(TranslatorEngine): base_url = models.URLField( - _("URL"), default="https://translate.googleapis.com/translate_a/single" - ) + _("URL"), null=True, blank=True, help_text=_("It is recommended to leave this blank in order to automatically select the best server") + ) # https://translate.googleapis.com/translate_a/single proxy = models.URLField(_("Proxy(optional)"), null=True, blank=True, default=None) - interval = models.IntegerField(_("Request Interval(s)"), default=3) + interval = models.IntegerField(_("Request Interval(s)"), default=1) max_characters = models.IntegerField(default=1000) language_code_map = { "English": "en", @@ -55,22 +56,19 @@ def translate(self, text: str, target_language: str, **kwargs) -> dict: ) return {"text": translated_text, "characters": len(text)} try: - params = { - "client": "gtx", - "sl": "auto", - "tl": target_language, - "dt": "t", - "q": text, - } - resp = httpx.get(self.base_url, params=params, timeout=10, proxy=self.proxy) - resp.raise_for_status() - resp_json = resp.json() - if resp_json: - translated_text = resp_json[0][0][0] - else: - logging.error( - "GoogleTranslateWebTranslator->Invalid response: %s", resp.text - ) + # params = { + # "client": "gtx", + # "sl": "auto", + # "tl": target_language, + # "dt": "t", + # "q": text, + # } + # resp = httpx.get(self.base_url, params=params, timeout=10, proxy=self.proxy) + # resp.raise_for_status() + # resp_json = resp.json() + results = ts.translate_text(text, to_language=target_language, translator="google", reset_host_url=self.base_url, proxies=self.proxy) + if results: + translated_text = results except Exception as e: logging.error("GoogleTranslateWebTranslator->%s: %s", e, text) finally: