草庐IT

xml - XML 文档的 I18N

coder 2024-06-26 原文

我即将决定如何处理基于 XML 的 UI 描述格式的国际化。

格式通常如下所示:

...
<devif>
  <screen id="scr1" title="Settings for this and that">
    <header text="Climate readings"/>
    <rd setp="123" text="Air temperature" unit="°C"/>
    <rd setp="234" text="Humidity" unit="%RH"/>
    <rd setp="345" text="CO2" unit="ppm"/>

    <header text="Settings"/>
    <wr setp="567" text="Air temperature demand" unit="°C"/>
  </screen>
  ...
</devif>

每个文件包含很多屏幕,最多可达 10,000 行,我们的应用程序中有十几个这样的文件。

我仍然可以更改格式以最适合我们的需要。那么你会如何翻译这个呢?

我一直在考虑一些可能的方法来处理这个问题:

  • 包含英文文本和翻译文本的每种语言的单独文件
  • 为每个标签使用一个 ID,并为每个 ID 使用一个包含翻译文本的单独文件
  • 将所有翻译放在同一个文件中

第一个解决方案的问题是,英文文本可能会根据上下文翻译成不同的消息。

第二种解决方案降低了源文件的可读性(虽然不是很多),并且它不能轻松处理属性的转换。

一旦文件被翻译成大约 5-6 种语言,第三种解决方案会使文件变得非常大且难以处理。

最佳答案

我们使用标准TMX文件,它们是用于保存国际化文字的标准 XML 文件。每个条目都由一个标签标识,该标签是代码周围的引用。每个条目都有所有可能的翻译,最重要的部分是 TMX 是翻译程序和专业人士使用的标准。

如果您已经有 XML 文件来保存文字,您可以通过 XSLT 样式表转换它们。

这是格式的一个例子:

<?xml version="1.0" encoding="UTF-8"?>
<tmx>
    <body>
        <tu tuid="$ALARM_BARCODE_READER_COMMS">
            <tuv lang="ES">
                <seg>Lector códigos de barras: No Operativo</seg>
            </tuv>
            <tuv lang="EN">
                <seg>Barcode reader: Not operative</seg>
            </tuv>
            <tuv lang="ZH">
                <seg>读卡器:通讯错误</seg>
            </tuv>
        </tu>
        <tu tuid="$ALARM_BARCODE_READER_FAIL">
            <tuv lang="ES">
                <seg>Lector códigos de barras: Fallo</seg>
            </tuv>
            <tuv lang="EN">
                <seg>Barcode Reader: Fail</seg>
            </tuv>
            <tuv lang="ZH">
                <seg>读卡器:故障</seg>
            </tuv>
        </tu>
        <tu tuid="$NO_PAYMENT_MODE_AVAILABLE">
            <tuv lang="ES">
                <seg>No hay sistemas de pago disponibles</seg>
            </tuv>
            <tuv lang="EN">
                <seg>No payment systems available</seg>
            </tuv>
            <tuv lang="ZH">
                <seg>读卡器:故障</seg>
            </tuv>
        </tu>       
        <tu tuid="$ALARM_BLACKLIST_CARD">
            <tuv lang="ES">
                <seg>Tarjeta de pago en lista negra</seg>
            </tuv>
            <tuv lang="EN">
                <seg>Payment card in blacklist</seg>
            </tuv>
            <tuv lang="ZH">
                <seg>付费的IC卡是黑名单卡</seg>
            </tuv>
        </tu>
   </body>
</tmx>

关于xml - XML 文档的 I18N,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/692789/

有关xml - XML 文档的 I18N的更多相关文章

  1. ruby - i18n Assets 管理/翻译 UI - 2

    我正在使用i18n从头开始​​构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在ruby​​onrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi

  2. ruby-on-rails - Rails 3 I18 : translation missing: da. datetime.distance_in_words.about_x_hours - 2

    我看到这个错误:translationmissing:da.datetime.distance_in_words.about_x_hours我的语言环境文件:http://pastie.org/2944890我的看法:我已将其添加到我的application.rb中:config.i18n.load_path+=Dir[Rails.root.join('my','locales','*.{rb,yml}').to_s]config.i18n.default_locale=:da如果我删除I18配置,帮助程序会处理英语。更新:我在config/enviorments/devolpment

  3. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  4. ruby-on-rails - 如果我将 ruby​​ 版本 2.5.1 与 rails 版本 2.3.18 一起使用会怎样? - 2

    如果我使用ruby​​版本2.5.1和Rails版本2.3.18会怎样?我有基于rails2.3.18和ruby​​1.9.2p320构建的rails应用程序,我只想升级ruby的版本,而不是rails,这可能吗?我必须面对哪些挑战? 最佳答案 GitHub维护apublicfork它有针对旧Rails版本的分支,有各种变化,它们一直在运行。有一段时间,他们在较新的Ruby版本上运行较旧的Rails版本,而不是最初支持的版本,因此您可能会发现一些关于需要向后移植的有用提示。不过,他们现在已经有几年没有使用2.3了,所以充其量只能让更

  5. ruby-on-rails - Ruby on Rails I18n 插值 - 2

    大家好!我对我的:username字段进行了一个小的验证,它应该是4到30个字符。我写了一个验证::length=>{:within=>4..30,:message=>I18n.t('activerecord.errors.range')-我想显示一个错误各种错误的消息(不像,太长或太短),但这里有一个问题-我可以将最小值和最大值都传递给翻译,以便有类似的东西:用户名应该在4到30个字符之间。目前我有:range:"shouldbebetween%{count}and%{count}characters",这显然不起作用(只是为了检查)。是否可以从范围中获取这些值?谢谢大家的指教!

  6. Matlab imread()读到了什么 (浅显 当复习文档了) - 2

    matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1

  7. Ruby 等同于 Sphinx 文档生成器? - 2

    Ruby有一些不错的文档生成器,例如Yard、rDoc,甚至Glyph。问题是Sphinx可以做网站、PDF、epub、LaTex等。它在重组文本中完成所有这些事情。在Ruby世界中有替​​代方案吗?也许是程序的组合?如果我也能使用Markdown就更好了。 最佳答案 自1.0版以来,Sphinx有了“域”的概念,它是从Python和/或C以外的语言标记代码实体(如方法调用、对象、函数等)的方法。有一个rubydomain,所以你可以只使用Sphinx本身。您唯一会缺少的(我认为)是Sphinx使用autodoc从源代码自动创建文档

  8. ruby-on-rails - 如果特定语言环境中缺少翻译,如何配置 i18n 以使用 en 语言环境? - 2

    如果特定语言环境中缺少翻译,如何配置i18n以使用en语言环境翻译?当前已插入翻译缺失消息。我正在使用RoR3.1。 最佳答案 找到相似的question这里是答案:#application.rb#railswillfallbacktoconfig.i18n.default_localetranslationconfig.i18n.fallbacks=true#railswillfallbacktoen,nomatterwhatissetasconfig.i18n.default_localeconfig.i18n.fallback

  9. ruby-on-rails - 在 irb 中阅读文档 - 2

    我怀念ipython的一件事是它有一个?为特定功能挖掘文档的运算符。我知道ruby​​有一个类似的命令行工具,但是我在irb中调用它非常不方便。ruby/irb有类似的东西吗? 最佳答案 Pry是IPython的Ruby版本,它支持?命令来查找有关方法的文档,但语法略有不同:pry(main)>?File.dirnameFrom:file.cinRubyCore(CMethod):Numberoflines:6visibility:publicsignature:dirname()Returnsallcomponentsofthef

  10. ruby-on-rails - 如何在 Rails 3 中禁用 XML 解析 - 2

    我想禁用HTTP参数的自动XML解析。但我发现命令仅适用于Rails2.x,它们都不适用于3.0:config.action_controller.param_parsers.deleteMime::XML(application.rb)ActionController::Base.param_parsers.deleteMime::XMLRails3.0中的等价物是什么? 最佳答案 根据CVE-2013-0156的最新安全公告你可以将它用于Rails3.0。3.1和3.2ActionDispatch::ParamsParser::

随机推荐