檢查與修復¶
自訂自動修復¶
還可以應用除了自動修正以外自己的自動修正,並將它們包括到 AUTOFIX_LIST。
自動修復很強大,但可能導致損壞;寫指令碼的時候要小心。
例如,後面的自動修復會將每次出現的字串 foo 在翻譯中替換為 bar :
from weblate.trans.autofixes.base import AutoFix
class ReplaceFooWithBar(AutoFix):
"""Replace foo with bar."""
# Might be localized using gettext_lazy
name = "Foobar"
def fix_single_target(self, target, source, unit):
if "foo" in target:
return target.replace("foo", "bar"), True
return target, False
為了安裝自訂的檢查,在 AUTOFIX_LIST 中為 Python 類提供完全合規的路徑,請參閱 自訂的品質檢查、附加元件與自動修復。
使用旗標自訂行為¶
您可以使用旗標微調 Weblate 的行為。旗標會為譯者提供視覺回饋,並協助他們改善翻譯。旗標會從下列來源合併:
來源字串額外旗標:
從檔案格式擷取的個別字串旗標,請參閱 在地化檔案格式。
翻譯旗標(目前只有雙語來源字串,或停用單語範本編輯時所用的
read-only旗標)。檔案格式特定旗標。
旗標以逗號分隔;如果帶有參數,則以冒號分隔。您可以使用引號,在字串中包含空白或特殊字元。例如:
placeholders:"special:value":"other value", regex:.*
單引號和雙引號都可使用,特殊字元會使用反斜線逸出:
placeholders:"quoted \"string\"":'single \'quoted\''
placeholders:r"^#*"
用於確認譯者沒有變更 Markdown 文件的標題。如果字串 ### Index 被翻譯成 # Indice,檢查就會失敗。
placeholders:r"\]\([^h].*?\)"
用於確保內部連結沒有遭到翻譯(例如 [test](../checks) 不應變成 [test](../chequeos))。
可以使用 discard:NAME 語法捨棄較高層級定義的旗標。例如,如果元件設定為 safe-html,可在字串旗標中新增 discard:safe-html,讓這個特定字串略過該旗標。
這裡是目前接受的旗標清單:
read-only應該唯讀並且不該在 Weblate 中編輯的字串。請參閱 唯讀的字串。
terminology用在 詞彙表。將字串複製進所有詞彙表語言,以便在所有翻譯中使用相同表述。和
read-only搭配用在產品名等地方也有用。priority:N字串的優先順序。高優先順序的字串首先出現被翻譯。預設的優先順序是 100,字串的優先順序越高,就會越早安排翻譯。
max-length:N限制字串的最大長度為 N 個字元,請參閱 翻譯最大長度。
xml-textfont-family:NAME為繪製檢查定義字型家族,請參閱 管理字型。
font-weight:WEIGHT為繪製檢查定義字型權重,請參閱 管理字型。
font-size:SIZE為繪製檢查定義字型大小,請參閱 管理字型。
font-spacing:SPACING為繪製檢查定義字母間隔,請參閱 管理字型。
icu-flags:FLAGS指定自訂 ICU MessageFormat 品質檢查行為的標記。
icu-tag-prefix:PREFIX為 ICU MessageFormat 品質檢查設定必需的 XML 標籤字首。
placeholders:NAME:NAME2:...翻譯中需要的佔位字串,請參閱 佔位符號。
replacements:FROM:TO:FROM2:TO2...當檢查結果文字引數時執行替換(例如在 翻譯的最大長度 或 翻譯最大長度 中)。這一典型應用的情況拓展了非譯元素,確保相符那些即使使用了長值的文字,例如
replacements:%s:"John Doe"。variants:SOURCE將此字串標記為具有相符來源的字串的變體。見 字串變數。
regex:REGEX用來比對翻譯的正規表示式;請參閱 正規表達式。
discard:NAME捨棄在較高層級定義的旗標。
forbidden表示詞彙表中的禁止翻譯,請參閱 禁止的翻譯。
strict-same讓 未變更的翻譯 不使用內建的字詞例外清單。
strict-format讓格式檢查即使遇到只有單一值的複數形式,仍強制使用格式;請參閱 格式化字串。
case-insensitive調整檢查行為不區分大小寫。目前僅影響 佔位符號 品質檢查。
accelerator指定單一標點快速鍵標記,例如
accelerator:&、accelerator:_或accelerator:~。啟用 加速器金鑰 品質檢查。asciidoc-textTreat a text as an AsciiDoc document, affects 未變更的翻譯. Enables the AsciiDoc markup quality check.
bbcode-text將文字視為 Bulletin Board Code (BBCode) 文件,會影響 未變更的翻譯,並啟用 BBCode 標記 品質檢查。
check-glossary啟用 與詞彙表不同 品質檢查。
fluent-parts啟用 Fluent 部分 品質檢查。
fluent-references啟用 Fluent 引用 品質檢查。
fluent-target-inner-html啟用 Fluent 翻譯 inner HTML 品質檢查。
fluent-target-syntax啟用 Fluent 翻譯語法 品質檢查。
angularjs-format啟用 AngularJS 插值字串 品質檢查。
automattic-components-format啟用 Automattic 元件格式設定 品質檢查。
c-format啟用 C 格式 品質檢查。
c-sharp-format啟用 C# 格式 品質檢查。
csharp-format啟用 C# 格式 品質檢查。
es-format啟用 ECMAScript 範本字面值 品質檢查。
i18next-interpolation啟用 i18next 插值 品質檢查。
icu-message-format啟用 ICU MessageFormat 和 ICU MessageFormat 語法 品質檢查。
java-printf-format啟用 Java 格式 品質檢查。
java-format啟用 Java MessageFormat 品質檢查。
auto-java-messageformat將文字視為條件式 Java MessageFormat;只有來源含有 Java MessageFormat 預留位置時,才啟用 Java MessageFormat。同時會啟用 Java MessageFormat 品質檢查。
javascript-format啟用 JavaScript 格式 品質檢查。
laravel-format啟用 Laravel 格式 品質檢查。
lua-format啟用 Lua 格式 品質檢查。
object-pascal-format啟用 Object Pascal 格式 品質檢查。
objc-format啟用 Objective-C 格式 品質檢查。
percent-placeholders啟用 百分比佔位符號 品質檢查。
perl-brace-format啟用 Perl 大括號格式 品質檢查。
perl-format啟用 Perl 格式 品質檢查。
php-format啟用 PHP 格式 品質檢查。
python-brace-format啟用 Python 大括號格式 品質檢查。
python-format啟用 Python 格式 品質檢查。
qt-format啟用 Qt 格式 品質檢查。
qt-plural-format啟用 Qt 複數格式 品質檢查。
ruby-format啟用 Ruby 格式 品質檢查。
scheme-format啟用 Scheme 格式 品質檢查。
vue-format啟用 Vue I18n 格式 品質檢查。
rst-text將文字視為 reStructuredText 文件,會影響 未變更的翻譯,並啟用 不一致的 reStructuredText 及 reStructuredText 語法錯誤 品質檢查。
md-text將文字視為 Markdown 文件,並在翻譯文字區域提供 Markdown 語法醒目顯示。啟用 Markdown 連結、Markdown 參照 和 Markdown 語法 品質檢查。
max-length啟用 翻譯最大長度 品質檢查。
max-size啟用 翻譯的最大長度 品質檢查。
placeholders啟用 佔位符號 品質檢查。
regex啟用 正規表達式 品質檢查。
safe-mdx啟用 安全的 MDX 品質檢查。
safe-html啟用 不安全的 HTML 品質檢查。
auto-safe-html將文字視為條件式 HTML;只有純文字,或含有標準 HTML 標記或有效自訂元素的來源字串,才啟用 不安全的 HTML。這適用於 MDX 等擴充 Markdown 變體,其中的尖括號語法不一定是 HTML。同時會啟用 不安全的 HTML 品質檢查。
url字串應該只由一個 URL 組成。啟用 URL 品質檢查。
fluent-source-inner-html啟用 Fluent 來源內部 HTML 品質檢查。
fluent-source-syntax啟用 Fluent 來源語法 品質檢查。
ignore-all-checks忽略所有品質檢查。
ignore-accelerator跳過 加速器金鑰 品質檢查。
ignore-asciidoc-markupSkip the AsciiDoc markup quality check.
ignore-bbcode略過 BBCode 標記 品質檢查。
ignore-xml-chars-around-tags略過 XML 標籤周圍的字元 品質檢查。
ignore-duplicate略過 連續重複單字 品質檢查。
ignore-check-glossary略過 與詞彙表不同 品質檢查。
ignore-double-space略過 兩個空白 品質檢查。
ignore-fluent-parts略過 Fluent 部分 品質檢查。
ignore-fluent-references略過 Fluent 引用 品質檢查。
ignore-fluent-target-inner-html略過 Fluent 翻譯 inner HTML 品質檢查。
ignore-fluent-target-syntax略過 Fluent 翻譯語法 品質檢查。
ignore-angularjs-format略過 AngularJS 插值字串 品質檢查。
ignore-automattic-components-format略過 Automattic 元件格式設定 品質檢查。
ignore-c-format略過 C 格式 品質檢查。
ignore-c-sharp-format略過 C# 格式 品質檢查。
ignore-es-format略過 ECMAScript 範本字面值 品質檢查。
ignore-i18next-interpolation略過 i18next 插值 品質檢查。
ignore-icu-message-format略過 ICU MessageFormat 品質檢查。
ignore-java-printf-format略過 Java 格式 品質檢查。
ignore-java-format略過 Java MessageFormat 品質檢查。
ignore-javascript-format略過 JavaScript 格式 品質檢查。
ignore-laravel-format略過 Laravel 格式 品質檢查。
ignore-lua-format略過 Lua 格式 品質檢查。
ignore-object-pascal-format略過 Object Pascal 格式 品質檢查。
ignore-objc-format略過 Objective-C 格式 品質檢查。
ignore-percent-placeholders略過 百分比佔位符號 品質檢查。
ignore-perl-brace-format略過 Perl 大括號格式 品質檢查。
ignore-perl-format略過 Perl 格式 品質檢查。
ignore-php-format略過 PHP 格式 品質檢查。
ignore-python-brace-format略過 Python 大括號格式 品質檢查。
ignore-python-format略過 Python 格式 品質檢查。
ignore-qt-format略過 Qt 格式 品質檢查。
ignore-qt-plural-format略過 Qt 複數格式 品質檢查。
ignore-ruby-format略過 Ruby 格式 品質檢查。
ignore-scheme-format略過 Scheme 格式 品質檢查。
ignore-vue-format略過 Vue I18n 格式 品質檢查。
ignore-translated略過 已經翻譯過 品質檢查。
ignore-inconsistent略過 不一致 品質檢查。
ignore-rst-references略過 不一致的 reStructuredText 品質檢查。
ignore-kashida略過 使用 Kashida letter 品質檢查。
ignore-md-link略過 Markdown 連結 品質檢查。
ignore-md-reflink略過 Markdown 參照 品質檢查。
ignore-md-syntax略過 Markdown 語法 品質檢查。
ignore-max-length略過 翻譯最大長度 品質檢查。
ignore-max-size略過 翻譯的最大長度 品質檢查。
ignore-escaped-newline略過 不相符的 \n 品質檢查。
ignore-end-colon略過 冒號不相符 品質檢查。
ignore-end-ellipsis略過 刪節號不相符 品質檢查。
ignore-end-exclamation略過 驚嘆號不相符 品質檢查。
ignore-end-stop略過 句號不相符 品質檢查。
ignore-end-interrobang略過 不相配的驚歎問號 品質檢查。
ignore-end-question略過 問號不相符 品質檢查。
ignore-end-semicolon略過 分號不相符 品質檢查。
ignore-newline-count略過 斷列符不相配 品質檢查。
ignore-plurals略過 缺少複數 品質檢查。
ignore-multiple-capital略過 多個大寫字母 品質檢查。
ignore-kabyle-characters略過 非標準的柏柏爾語字元 品質檢查。
ignore-placeholders略過 佔位符號 品質檢查。
ignore-prohibited-initial-character略過 禁止的初始字元 品質檢查。
ignore-punctuation-spacing略過 標點符號間距 品質檢查。
ignore-regex略過 正規表達式 品質檢查。
ignore-rst-syntax略過 reStructuredText 語法錯誤 品質檢查。
ignore-reused略過 重複使用的翻譯 品質檢查。
ignore-safe-mdx跳過 安全的 MDX 品質檢查。
ignore-same-plurals略過 相同複數 品質檢查。
ignore-begin-newline略過 開頭換行 品質檢查。
ignore-begin-space略過 開頭空格 品質檢查。
ignore-end-newline略過 後隨換行 品質檢查。
ignore-end-space略過 後隨空格 品質檢查。
ignore-same略過 未變更的翻譯 品質檢查。
ignore-safe-html略過 不安全的 HTML 品質檢查。
ignore-url略過 URL 品質檢查。
ignore-xml-tags略過 XML 標記 品質檢查。
ignore-xml-invalid略過 XML 語法 品質檢查。
ignore-zero-width-space略過 零寬度空格 品質檢查。
ignore-ellipsis略過 刪節號 品質檢查。
ignore-fluent-source-inner-html略過 Fluent 來源內部 HTML 品質檢查。
ignore-fluent-source-syntax略過 Fluent 來源語法 品質檢查。
ignore-icu-message-format略過 ICU MessageFormat 語法 品質檢查。
ignore-long-untranslated略過 長期未翻譯 品質檢查。
ignore-multiple-failures略過 多項未通過檢查 品質檢查。
ignore-unnamed-format略過 多個未命名變數 品質檢查。
ignore-source-max-length跳過 來源字串長度 品質檢查。
ignore-optional-plural略過 未複數化 品質檢查。
備註
通一般則是,任何檢查都使用辨識文字來命名 ignore-*,所以能夠將規則應用在自訂檢查中。
每個來源字串的設定,在 元件設定 設定中,並且在翻譯檔案自身中(例如在 GNU gettex 中),能夠理解這些標記。
基於位置的旗標¶
系統預設會根據位置將某些旗標加入字串。這表示系統會依字串的使用位置自動啟用特定檢查。
rst-text:如果位置的副檔名是.rst,這個旗標會自動加入 reStructuredText 檔案的字串。md-text:如果位置的副檔名是.md、.markdown或.mdx,這個旗標會自動加入 Markdown 及 MDX 檔案的字串。
強制執行檢查¶
The enforced checks cannot be dismissed and mark string as Needs editing (see 翻譯狀態). This prevents translators from hiding such checks.
提示
啟用強制檢查不會自動啟用該檢查。有些檢查必須在字串或元件旗標中加入對應旗標才會啟用。
這項功能最適合用於 格式化字串 等檢查,因為不處理這類檢查可能造成嚴重問題。不建議用於 未變更的翻譯 等樣式檢查,因為略過這類檢查有時是合理的處理方式。
接著可使用 翻譯品質過濾器,排除將需要編輯的字串提交至版本控制系統。
管理字型¶
提示
上傳到 Weblate 的字型僅用於 翻譯的最大長度 檢查,它們對 Weblate 使用者介面沒有影響。
用於計算所呈現文字尺寸的 翻譯的最大長度 檢查需要將字型載入到 Weblate 中,並使用翻譯標記選取(請參閱 使用旗標自訂行為)。
翻譯專案 操作 選單中的 字型 是 Weblate 字型管理工具,提供上傳及管理字型的介面。您可以上傳 TrueType 或 OpenType 字型、建立字型群組,並在檢查中使用這些群組。
字型群組允許您為不同語言定義不同字型,非拉丁語言通常需要:
字型群組透過名稱辨識,名稱不能包含空白字元或特殊字元,這使它能夠容易地用在檢查定義中:
上傳後,系統會自動辨識字型系列與樣式:
您可以將幾種字型載入到 Weblate 中:
為了使用字型來檢查字串長度,將適當的標記傳遞給它 (請參閱 使用旗標自訂行為)。可能會需要後面這些:
max-size:500/max-size:300:5定義最大寬度(像素),並選用擇定義最多行數。設定為多行時會自動換行。
font-family:ubuntu指定辨識碼,以定義要使用的字型群組。
font-size:22以像素為單位定義字型大小。
撰寫自訂檢查¶
Weblate 內建了很大範圍的品質檢查,(請參閱 品質檢查 ),儘管可能沒有覆寫想要檢查的所有內容。可以使用 CHECK_LIST 來調整執行檢查的清單,也可以新增自訂的檢查。
weblate.checks.Check 子類別
設定一些屬性。
應用
check(如果想要處理程式碼中的複數的話)或check_single方法(它將為您完成)。
一些範例:
為了安裝自訂的檢查,在 CHECK_LIST 中為 Python 類提供完全合格的路徑,請參閱 自訂的品質檢查、附加元件與自動修復。
檢查翻譯文字不含有 “ foo ”¶
這是一項很簡單的檢查,只會確認譯文是否缺少字串 "foo"。
"""Simple quality check example."""
from django.utils.translation import gettext_lazy
from weblate.checks.base import TargetCheck
class FooCheck(TargetCheck):
# Used as identifier for check, should be unique
# Has to be shorter than 50 characters
check_id = "foo"
# Short name used to display failing check
# Might be localized using gettext_lazy
name = "Foo check"
# Description for failing check
description = gettext_lazy("Your translation is foo")
# Real check code
def check_single(self, source, target, unit):
return "foo" in target
檢查捷克語翻譯文字的複數差異¶
使用語言資訊來驗證捷克語中的兩種複數形式並不相同。
"""Quality check example for Czech plurals."""
from django.utils.translation import gettext_lazy
from weblate.checks.base import TargetCheck
class PluralCzechCheck(TargetCheck):
# Used as identifier for check, should be unique
# Has to be shorter than 50 characters
check_id = "foo"
# Short name used to display failing check
# Might be localized using gettext_lazy
name = "Foo check"
# Description for failing check
description = gettext_lazy("Your translation is foo")
# Real check code
def check_target_unit(self, sources, targets, unit):
if unit.translation.language.is_base({"cs"}):
return targets[1] == targets[2]
return False
def check_single(self, source, target, unit) -> bool:
"""We don't check target strings here."""
return False