Symfony 5.4现有XLIFF翻译文件转CSV/JSON可行吗?
直接转换Symfony 5.4的XLIFF翻译文件到CSV/JSON
可以直接转换现有XLIFF文件,不需要用Symfony的extract或update命令。外部工具失效大概率是因为它们不兼容Symfony采用的XLIFF 1.2规范,下面提供两种可靠的本地转换方案:
方法1:用Symfony Translation组件编写转换脚本
利用Symfony原生的翻译加载器直接读取现有XLIFF内容,避免重新生成翻译:
- 先通过Composer安装必要组件(如果项目里没装的话):
composer require symfony/translation
- 创建转换脚本(比如
xliff-converter.php):
<?php require __DIR__.'/vendor/autoload.php'; use Symfony\Component\Translation\Loader\XliffFileLoader; // 初始化XLIFF加载器 $loader = new XliffFileLoader(); // 加载你的目标XLIFF文件,替换成实际路径 $catalogue = $loader->load(__DIR__.'/translations/messages.zh.xlf', 'zh'); $translations = $catalogue->all(); // 转换为JSON file_put_contents( __DIR__.'/translations/messages.zh.json', json_encode($translations, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) ); // 转换为CSV $csvFile = fopen(__DIR__.'/translations/messages.zh.csv', 'w'); fputcsv($csvFile, ['翻译键', '译文']); foreach ($translations as $key => $value) { fputcsv($csvFile, [$key, $value]); } fclose($csvFile);
- 运行脚本完成转换:
php xliff-converter.php
方法2:手动解析XLIFF(无需额外依赖)
如果不想安装组件,可通过PHP的SimpleXML直接解析Symfony的XLIFF结构:
创建脚本xliff-parser.php:
<?php // 加载目标XLIFF文件 $xliff = simplexml_load_file(__DIR__.'/translations/messages.zh.xlf'); // 注册XLIFF命名空间,确保能正确遍历节点 $xliff->registerXPathNamespace('xlf', 'urn:oasis:names:tc:xliff:document:1.2'); $translations = []; // 遍历所有翻译单元 foreach ($xliff->xpath('//xlf:trans-unit') as $unit) { $key = (string)$unit->source; $translation = (string)$unit->target; $translations[$key] = $translation; } // 输出JSON file_put_contents( __DIR__.'/translations/messages.zh.json', json_encode($translations, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) ); // 输出CSV $csvFile = fopen(__DIR__.'/translations/messages.zh.csv', 'w'); fputcsv($csvFile, ['翻译键', '译文']); foreach ($translations as $key => $value) { fputcsv($csvFile, [$key, $value]); } fclose($csvFile);
直接运行脚本即可完成转换,完全基于现有XLIFF内容,不会修改或重新生成翻译文本。
内容的提问来源于stack exchange,提问作者StockBreak
相关产品推荐
相关产品推荐

