后端开发工具【免费下载链接】weblateWeb based localization tool with tight version control integration.项目地址https://gitcode.com/gh_mirrors/we/weblate点击查看免费下载Fluent 是 Mozilla 主导的面向现代本地化的单语文本格式它强调非对称本地化——一种语言中的简单字符串可以映射为另一种语言中的复杂多形态翻译。Weblate 自 4.8 版本起引入对 Fluent 的原生支持fluent格式文件扩展名.ftl并在 5.0 版本中由 Henry Wilkes 贡献了一整套专门的语法与语义质量检查参见 v5 变更日志。本文以 Fluent 格式文档 为主体结合 格式注册实现、Fluent 检查模块 与对应测试完整说明 Fluent 在 Weblate 中的格式特性、组件配置方式、底层实现原理以及六项专属质量检查的启用与行为帮助你直接在 Weblate 中落地 Fluent 本地化工作流。Fluent 格式与非对称本地化Fluent 是一种单语monolingual文本格式每个翻译文件只包含一种语言的内容字符串以key value形式存在键key与值value同处一个文件而非像 gettext 那样把源语言和目标语言放在同一文件中。其核心设计是支持非对称本地化——源语言中的一个简单字符串在目标语言中可能映射为一个包含多种形态、选择表达式Select Expression甚至多个属性的复杂翻译。这种不对称性对翻译管理系统提出了特殊要求它不仅要保存译文还要保留 Fluent 特有的结构值、属性、引用、选择分支这正是 Weblate 对 Fluent 提供专属检查的原因。在 Weblate 中Fluent 由FluentFormat类注册实现其关键元数据见 ttkit.py属性值说明format_idfluentAPI / 界面中使用的格式标识nameFluent file组件配置中显示的名称loader(fluent, FluentFile)底层依赖 Translate Toolkit 的translate.storage.fluent.FluentFile解析器autoload*.ftl自动识别.ftl扩展名language_formatbcp语言代码使用 BCP 47 规范如cs-CZmimetypetext/x-fluent导出/下载时的 MIME 类型extensionftl标准文件扩展名empty_file_template新翻译文件以空模板创建monolingualTrue单语格式需要单独指定基础语言文件supports_descriptionsTrue支持为字符串添加说明description格式特性总览根据自动生成的格式特性片段 fluent-features.rstWeblate 对 Fluent 的支持能力如下特性支持情况文件扩展名.ftl语言类型单语Monolingual复数支持否Fluent 通过选择表达式实现复数不使用 Weblate 的复数机制描述Descriptions支持说明Explanation不支持上下文Context不支持键即上下文位置Location不支持标志Flags不支持API 标识fluent只读字符串不支持移除过时字符串不支持由该格式附加的检查标志fluent-source-syntax、fluent-target-syntax、fluent-parts、fluent-references、fluent-source-inner-html、fluent-target-inner-html、ignore-xml-tags、ignore-xml-invalid其中最后两项目ignore-xml-tags与ignore-xml-invalid是自动附加的——由于 Fluent 消息的值常被直接当作 HTML 的innerHTML使用通用 XML 检查会产生大量误报因此由 Fluent 专属的fluent-*-inner-html检查取代同时显式忽略 XML 类检查参见 FluentFormat.check_flags 定义。在 Weblate 中配置 Fluent 组件在创建或编辑组件时按以下配置即可启用 Fluent 翻译表格源自 Fluent 格式文档组件字段推荐值文件掩码File masklocales/*/messages.ftl单语基础语言文件Monolingual base language filelocales/en/messages.ftl新翻译模板Template for new translations空Empty文件格式File formatFluent file要点说明文件掩码使用通配符覆盖各语言目录例如locales/*/messages.ftl会匹配locales/cs/messages.ftl、locales/de/messages.ftl等。对应的测试断言EXPECTED_PATH locales/cs-CZ/messages.ftl见 FluentFormatTest印证语言目录使用 BCP 47 语言代码。基础语言文件Fluent 是单语格式必须指定基础语言文件通常为英文Weblate 以其中的键集合作为翻译源。新翻译模板为空新建语言时直接创建空文件而非复制基础语言文件。语言代码language_format bcp意味着语言目录名采用 BCP 47 规范。示例文件解析文档引用的示例文件 weblate/trans/tests/data/cs.ftl 展示了 Fluent 消息的基本形态hello Ahoj světe!\n orangutan Orangutan má %d banán.\n try Zkus Weblate na https://demo.weblate.org/!\n thanks Děkujeme za použití Weblate.可观察到的要点每个条目以键开头如hello等号右侧是值值内可以包含转义序列\n、引号、格式化占位符%d、HTML 内容等这些都属于合法的 Fluent 文本该文件共 4 条消息测试断言COUNT 4、FIND_CONTEXT hello且查找值Ahoj světe!\\n见 FluentFormatTest。此外FLuentFormatTest中NEW_UNIT_MATCH b\nkey Source string验证了新增单元翻译条目时的序列化输出格式为key Source string。底层实现格式加载与写入Weblate 对 Fluent 的支持建立在 Translate Toolkit 的FluentFile之上由FluentFormat继承TTKitFormat桥接。核心实现细节写入时的语法自校验FluentUnit.set_target()见 ttkit.py在写入译文时做了额外的安全处理先保存旧的目标与源值写入新目标值调用self.unit.to_entry()触发序列化从而提前发现任何 Fluent 语法问题一旦序列化抛出异常立即回滚旧内容并重新抛出异常。也就是说翻译者在 Weblate 界面中保存不合法的 Fluent 语法时写入会被拒绝并回滚而不是把损坏的语法写入仓库。底层抛出的FluentContentError在 translation.py 中被识别并作为已处理异常记录仅记录日志不当作崩溃级错误上报对应测试见 test_models.py 中 test_commit_retry_unit_fluent_content_error_uses_handled_logging。键编辑支持与限制从 source_edit.py 看fluent被列入KEY_FORMATS键格式集合意味着在单语模式下允许就地编辑键context/source。但 edit_identity() 明确限制带属性attributes或选择器selectors的 Fluent 消息不允许编辑否则抛出ValidationError(Editing Fluent messages with attributes or selectors is not supported.)。这与 Fluent 复杂消息的内部结构有关——这类消息一旦改变键其嵌套结构难以安全重构。对应测试见 test_source_edit.py 的 test_complex_fluent_edit_rejected。fluent-type 标志FluentUnit.flagsttkit.py会为每个单元附加fluent-type标志取值为Message或Term。fluent-type在 flags.py 中注册为带类型的标志TYPED_FLAGS用于下游检查区分消息与术语。测试断言默认导出标志为fluent-type:Message见 FluentFormatTest。Fluent 专属质量检查默认关闭需手动启用Weblate 5.0 起为 Fluent 提供 6 项专属检查全部默认禁用default_disabled True需在组件的质量检查设置中手动启用。它们注册于 checks/defaults.py实现在 weblate/checks/fluent/ 目录下完整测试见 test_fluent_checks.py约 2900 行覆盖 6 项检查。1. Fluent 源语法检查fluent-source-syntax实现在 syntax.py属于源字符串检查。它使用FluentUnitConverter将源字符串构造成 Fluent 单元并解析若出现语法错误则报错错误信息形如Fluent syntax error: {error}.。测试用例显示大量合法语法不会误报包括普通文本、emoji、test [string]、] test string、test string、含未闭合 HTML 标签的文本test p string、引用{ message }、{ $variable }、函数调用{ FUNCTION($n, val1: hello) }、字面量{ [ }、{ 3 }、转义字符与 Unicode 转义\u27BD、\U01F700、选择表达式{ $var - *[other] ok }等见 test_syntax_ok。2. Fluent 译文语法检查fluent-target-syntax实现在 syntax.py属于译文检查行为与源语法检查一致只是作用在译文上。3. Fluent 部件检查fluent-parts实现在 parts.py。Fluent 消息由多个部件组成一个可选值value消息正文与若干属性attributes。例如# 值 两个属性 This is the Message value .title This is the title attribute .alt This is the alt attribute该检查确保译文与源在部件上一一对应源消息有值则译文必须有值源没有值则译文也不可有源用到的属性译文必须全部出现且不得添加额外属性。该检查不应用于 Term术语——术语永远有值且术语的属性通常与语言相关如语法规则不必在每个翻译中出现。4. Fluent 引用检查fluent-references实现在 references.py。Fluent 消息可以引用其他消息、术语、属性或变量例如Here is a { message }, a { message.attribute } a { -term } and a { $variable }. Within a function { NUMBER($num, minimumFractionDigits: 2) }该检查要求译文使用与源相同集合、相同次数的引用不允许新增或遗漏对消息还会逐一比对每个属性内部的引用。针对选择表达式有专门规则源中的每个变体variant必须在译文中找到引用集合相同的对应变体若变量引用同时出现在选择器的选择器与某个变体内部则其他变体也被视为隐含包含该引用如{ $num - [one] an apple *[other] { $num } apples }中的[one]变体被视为也引用$num仅出现在选择器中的引用通常是术语属性如-term.starts-with-vowel不计入必需引用因为它们不构成最终可见文本且选择表达式的存在本身是语言相关的。5/6. Fluent 源/译文 innerHTML 检查fluent-source-inner-html / fluent-target-inner-html实现在 inner_html.py。Fluent 的值常被直接用作 HTML 元素的innerHTML例如 Fluent DOM 包的使用方式。该检查模拟 HTML5 合规解析器对值进行解析专门捕捉会导致字符串意外丢失的情况——例如误打开未闭合的标签、插入字符引用同时验证有意书写 HTML 时的良好实践闭合标签匹配、字符引用合法、属性值加引号。注意该检查仅作用于消息或术语的值value不作用于属性——属性在 Fluent 中往往是 HTML 属性值可包含任意字符串术语属性则多为语言特性仅在选择器中使用见 inner_html.py 的类文档。以上检查共享同一套基础设施FluentUnitConverterutils.py它依据fluent-type标志判断是 Message 还是 Term标志缺失时按键是否以-开头猜测Fluent 术语的键约定以-开头将翻译单元转换为FluentUnit后进行解析并提供语法错误与部件、引用提取能力。与其他格式的差异与注意事项复数处理Fluent 格式本身不支持 Weblate 的复数机制复数逻辑在 Fluent 内通过选择表达式完成因此supports_plural False。单语配置与 JSON、YAML 等单语格式一样Fluent 组件必须配置单语基础语言文件否则无法确定需要翻译的键集合。键识别变更v4 变更日志提示 Fluent 格式曾调整部分字符串的识别方式升级后可能需要重新核对字符串状态见 docs/changes/v4.rst而 5.0 带来的语法检查改进则在 v5 变更日志 中有记录。启用检查6 项 Fluent 专属检查默认关闭建议在启用 Fluent 组件后于项目/组件质量检查页面打开fluent-source-syntax、fluent-target-syntax与fluent-parts以保证仓库内语法与结构的一致性fluent-*-inner-html仅在消息值确会被当作 HTML 渲染时启用避免对纯文本项目产生不必要干扰。小结Fluent 的单语、非对称特性决定了它不能按传统双语格式处理。Weblate 通过FluentFormat桥接 Translate Toolkit 完成解析与序列化在写入时自校验语法防止损坏文件入库并配套 6 项针对 Fluent 语义的专属质量检查语法、部件、引用、innerHTML覆盖了 Fluent 本地化中最容易出错的环节。按照本文给出的locales/*/messages.ftl 基础语言文件配置即可在 Weblate 中构建一套语法安全、结构可控的 Fluent 翻译流水线如需进一步了解 Fluent 语法本身可参阅 docs/formats/fluent.rst 中指向的 Project Fluent 官方文档链接。赞分享后端开发工具【免费下载链接】weblateWeb based localization tool with tight version control integration.项目地址https://gitcode.com/gh_mirrors/we/weblate点击查看免费下载相关推荐Weblate Flat XML 文件格式深度指南单语 XML 翻译支持与自定义标签配置Weblate Flat XML 文件格式深度指南单语 XML 翻译支持与自定义标签配置 导读 本文聚焦 Weblate 对 Flat XML扁平 XML后端开发工具Weblate 对 PHP strings 文件格式的完整支持指南特性清单、单语工作流与源码实现Weblate 对 PHP strings 文件格式的完整支持指南特性清单、单语工作流与源码实现 PHP stringsPHP 字符串数组是 PHP 项目后端开发工具palera1n iOS 越狱工具A8-A11 从编译到 rootless 上手的完整路径palera1n iOS 越狱工具A8 A11 从编译到 rootless 上手的完整路径 palera1n 是一个基于 checkm8 BootROM 漏洞后端开发工具上一篇WAMR原生API导出终极指南3步实现C/C函数与WASM模块的无缝交互下一篇Blender MCP 插件手把手教程怎么装、怎么配、连不上怎么查创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考