【问题标题】:How to generate translation file (.po, .xliff, .yml,...) from a Symfony2/Silex project?如何从 Symfony2/Silex 项目生成翻译文件(.po、.xliff、.yml、...)?
【发布时间】:2013-04-14 22:17:47
【问题描述】:

我要构建一个 Silex/Symfony2 项目,我一直在寻找一种方法来根据项目内部要翻译的文本生成 XLIFF/PO/YAML 翻译文件,但没有找到任何说明或文档它。

我的问题是:有没有一种自动的方法来为 Symfony2/Silex 项目生成特定格式的翻译文件?

如果是,请告诉我如何生成文件然后更新翻译。

如果不是,请告诉我如何创建翻译文件然后为我的项目添加更多文本?我正在寻找基于桌面或基于 Web 的编辑器,而不是使用 Transifex、GetLocalization 等普通编辑器(但他们没有创建新文件或添加更多文本的选项)

【问题讨论】:

    标签: symfony translation silex xliff


    【解决方案1】:

    忙碌人士的解决方法 (UNIX)

    您可以在终端中运行以下命令:

    $ grep -rEo --no-filename "'.+'\|\btrans\b" templates/ > output.txt
    

    这将输出要翻译的消息列表:

    'Please provide your email'|trans
    'Phone'|trans
    'Please provide your phone number'|trans
    ...
    

    我的意思是几乎......但你通常可以从这里做一些工作......

    显然,您必须根据自己的喜好调整命令(transchoice,双引号而不是单引号...)。

    不理想,但可以提供帮助!

    grep 选项

    • grep -R, -r, --recursive:读取每个目录下的所有文件,递归方式这相当于-d recurse 选项。
    • grep -E, --extended-regexp:将 PATTERN 解释为扩展的正则表达式。
    • grep -o, --only-matching:仅显示匹配行中与 PATTERN 匹配的部分。
    • grep -h, --no-filename: 搜索多个文件时,禁止在输出中添加文件名前缀。

    (source)

    【讨论】:

      【解决方案2】:

      我看到你找到了一个转换器,但要回答你关于生成初始翻译文件的第一个问题 -

      如果您的系统上安装了Gettext,您可以从“项目内要翻译的文本”生成 PO 文件。命令行程序xgettext 将扫描源文件以查找您正在使用的任何功能。

      示例:
      要扫描 PHP 文件以查找 trans 方法调用 as shown here 的实例,您可以使用以下命令 -

      find . -name "*.php" | xargs xgettext --language=PHP --keyword=trans --output=messages.pot
      

      关于编辑器的问题:
      您可以使用任何 PO 编辑器(例如 POEdit)来管理您的翻译,但正如您所说,您最终需要将 PO 文件转换为 Symfony 的 XLIFF 或 YAML 语言包。

      我看到您已经找到了一个转换器工具。你可能还想试试我为 Loco 写的那个。支持PO to YAMLPO to XLIFF

      【讨论】:

      • 我认为用 xgettext 处理 symfonys 的复数语法是不可能的。
      • 这是真的。 Gettext 有限的复数语法与 Symfony 更具表现力的语法不兼容。您必须在实际字符串中嵌入特殊语法。虽然这适用于您在 Symfony 中使用的任何格式,包括推荐的 XLIFF 格式
      【解决方案3】:

      在网上找了好久,找到了一个不错的:

      https://github.com/schmittjoh/JMSTranslationBundle

      【讨论】:

      • 我有一个 .xlxs 文件需要更改为 .xliff - 您知道如何实现吗?谢谢。
      • 这不适用于Twig 2.0,直到JMS 1.3.1
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 2012-05-21
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      • 2018-12-13
      相关资源
      最近更新 更多