导出的 XLIFF 文件中的奇怪隐藏字符
Weird hidden characters in exported XLIFF file
每当我尝试 'Export For Internationalization' 时,导出的文件包含一个奇怪的隐藏字符,使 XLIFF 编辑器无法解析它。问题似乎出在原始的 .string
文件中,不知何故在这些文件中插入了奇怪的字符。我已经删除了这个奇怪的字符,但每当我导出它时,它仍然会潜入 xliff
文件中。我尝试清理并重建项目,重新启动 Xcode... none 似乎有效。
Xcode 是否以某种方式使用了包含错误字符的 'bad' .strings
文件的缓存版本?
使用Xcode
如果我尝试 Editor > Export For Localization
我得到:
/usr/bin/xmllint exited with status 1
使用终端
当我从终端 运行 像这样时:
xcodebuild -exportLocalizations -localizationPath
/Users/Kymer/Downloads/Wolf -project Wolf.xcodeproj -exportLanguage fr
我收到以下错误:
parser error : attributes construct error
parser error : Couldn't find end of Start Tag trans-unit
parser error : PCDATA invalid Char value 19
parser error : PCDATA invalid Char value 19
parser error : Opening and ending tag mismatch
parser error : invalid character in attribute value
parser error : attributes construct error
parser error : Couldn't find end of Start Tag
parser error : PCDATA invalid Char value
/Uxcodebuild: error: /usr/bin/xmllint exited with status 1
在这两种情况下,导出的 xliff
文件在使用 Sublime Text 检查时都包含奇怪的隐藏字符:
如果我手动删除坏字符,xliff-editors 可以完美读取该文件,但这当然不是一个好的长期解决方案。
我发现了问题:导出到 XLIFF 文件时 Xcode 不会查看您的 .string 文件,它全部由项目本身生成(即它查看所有 NSLocalizedString
电话和你的故事板)。这是有道理的。我在我的一个代码文件中发现了奇怪的隐藏字符。从源文件中删除它修复了导出问题。
最简单的 XLIFF 工作流程
我还会提到这一点以供将来参考:向您的项目添加新语言的最简单方法是首先使用命令行:
cd
到您的项目和 运行:
xcodebuild -exportLocalizations -localizationPath <path> -project <projectname>.xcodeproj -exportLanguage <language code>
这将创建一个新的 XLIFF 文件并将在文件中正确设置目标语言(源语言将是您的基本语言)。翻译人员现在可以轻松添加所有必要的翻译。之后,您可以将翻译后的 XLIFF 文件导入回 Xcode(select 目标和 Editor > Import localizations
)。 Xcode 然后将生成所有必需的 .string 文件。
更新现有语言:如果您添加新的UI元素并想要更新现有的本地化语言,您只需导出现有的本地化语言(select 目标和 Editor > Export for localization
)。该 XLIFF 文件将包含所有以前的翻译以及新字符串。翻译人员只需填写 'blank' 行即可。无需自己触摸 .string
文件,因为手动管理它很痛苦(尤其是使用疯狂的 Storyboard ID)。
每当我尝试 'Export For Internationalization' 时,导出的文件包含一个奇怪的隐藏字符,使 XLIFF 编辑器无法解析它。问题似乎出在原始的 .string
文件中,不知何故在这些文件中插入了奇怪的字符。我已经删除了这个奇怪的字符,但每当我导出它时,它仍然会潜入 xliff
文件中。我尝试清理并重建项目,重新启动 Xcode... none 似乎有效。
Xcode 是否以某种方式使用了包含错误字符的 'bad' .strings
文件的缓存版本?
使用Xcode
如果我尝试 Editor > Export For Localization
我得到:
/usr/bin/xmllint exited with status 1
使用终端
当我从终端 运行 像这样时:
xcodebuild -exportLocalizations -localizationPath
/Users/Kymer/Downloads/Wolf -project Wolf.xcodeproj -exportLanguage fr
我收到以下错误:
parser error : attributes construct error
parser error : Couldn't find end of Start Tag trans-unit
parser error : PCDATA invalid Char value 19
parser error : PCDATA invalid Char value 19
parser error : Opening and ending tag mismatch
parser error : invalid character in attribute value
parser error : attributes construct error
parser error : Couldn't find end of Start Tag
parser error : PCDATA invalid Char value
/Uxcodebuild: error: /usr/bin/xmllint exited with status 1
在这两种情况下,导出的 xliff
文件在使用 Sublime Text 检查时都包含奇怪的隐藏字符:
如果我手动删除坏字符,xliff-editors 可以完美读取该文件,但这当然不是一个好的长期解决方案。
我发现了问题:导出到 XLIFF 文件时 Xcode 不会查看您的 .string 文件,它全部由项目本身生成(即它查看所有 NSLocalizedString
电话和你的故事板)。这是有道理的。我在我的一个代码文件中发现了奇怪的隐藏字符。从源文件中删除它修复了导出问题。
最简单的 XLIFF 工作流程
我还会提到这一点以供将来参考:向您的项目添加新语言的最简单方法是首先使用命令行:
cd
到您的项目和 运行:
xcodebuild -exportLocalizations -localizationPath <path> -project <projectname>.xcodeproj -exportLanguage <language code>
这将创建一个新的 XLIFF 文件并将在文件中正确设置目标语言(源语言将是您的基本语言)。翻译人员现在可以轻松添加所有必要的翻译。之后,您可以将翻译后的 XLIFF 文件导入回 Xcode(select 目标和 Editor > Import localizations
)。 Xcode 然后将生成所有必需的 .string 文件。
更新现有语言:如果您添加新的UI元素并想要更新现有的本地化语言,您只需导出现有的本地化语言(select 目标和 Editor > Export for localization
)。该 XLIFF 文件将包含所有以前的翻译以及新字符串。翻译人员只需填写 'blank' 行即可。无需自己触摸 .string
文件,因为手动管理它很痛苦(尤其是使用疯狂的 Storyboard ID)。