.gitattributes
的文件,并将以下内容添加到其中:*.strings diff
对于我来说,没有任何解决方案可行,所以我进行了更深入的研究,在这个链接上我找到了以下内容:
in your project main directory, create or edit a .gitattributes file adding this line:
*.strings diff=localizablestrings
in the .gitconfig file in your home directory, add these lines:
[diff "localizablestrings"]
textconv = "iconv -f utf-16 -t utf-8"
在尝试Jonathan或Slawomir的解决方案后,我仍然无法正确地查看差异。它们仍被视为二进制文件。
我最终发现我们的localizable.strings文件不是使用UTF-8编码而是UTF-16编码。将编码更改回UTF-8后,它可以正常工作。
更改编码是否可行?是的,可以。实际上,苹果公司推荐使用UTF-8。
注意:建议您使用UTF-8编码保存字符串文件,这是标准字符串文件的默认编码。当将它们复制到产品中时,Xcode会自动将字符串文件从UTF-8转换为UTF-16。
如何知道该文件使用哪种编码?请参见此处的命令行和此处的Xcode:
file -I vol34.tex
请查看下面的评论,您可能需要手动更改文件的编码:
iconv -f UTF-16 -t UTF8 file.strings
.xcproj
文件认为的文件编码。通过iconv -f UTF-16 -t UTF8 file.strings
进行修复。 - Greggenstrings
,它会生成UTF-16LE格式的文件,因此我需要每次运行时将其转换回UTF-8。此外,使用iconv
和Xcode将文件转换为UTF-8对我来说都没有起作用,最终我使用了VS Code。 - Ric Santos.strings
文件转换为 utf-8 编码,包括其中一些已经是 utf-8 的情况。请从您的 *.lproj
目录所在的文件夹运行它。STRING_FILES=$(find . -type f -name '*.strings')
for f in $STRING_FILES; do
ENCODING=$(file -I $f)
if [[ $ENCODING == *"utf-16le"* ]]; then
iconv -f UTF-16 -t UTF8 $f > $f.1;
mv -f $f.1 $f
fi
done
这个想法是从钟雨辰的回答中得到的。
SourceTree
无法仅对英语本地化文件进行差异比较,其他文件都可以。因此,看起来只有该文件存在问题。Localized.strings
文件替换了英语文件,其中SourceTree
可以正确进行差异比较,复制了英语翻译,提交后,任何新更改都会被SourceTree
正确显示。.gitattributes
,其中包含以下内容:*.strings text
.strings
识别为文本文件。diff
,而您建议使用text
;这两者有什么区别? - Sukima在我的情况下,不需要 .gitattributes 和 .gitconfig 文件!
您需要执行以下简单步骤:
nano <path/to/your/file/Localizable.strings>
- 您可以在键入 nano
后将文件拖放到终端中 - 但不要按回车键control+x
和 y
以保存文件iconv -f utf-16 -t utf-8 path/to/localization/en.lproj/Localizable.strings > temp.strings
mv temp.strings path/to/localization/en.lproj/Localizable.strings > temp.strings
然后提交并合并您的更改。随后的差异将被正确显示。
text
,而您建议使用diff
;这两者有什么区别? - Sukimadiff
将会导致该类型的文件使用您的默认差异工具进行比较。 - Jonathan.Brinkgit config --global core.attributesfile <path>
,其中路径可以是类似于~/.gitattributes
的内容。 - Luiz Dias