【发布时间】:2015-07-21 17:25:12
【问题描述】:
我需要将 ./lang/ 文件夹中的所有 *.po 翻译文件转换为 *.mo 文件。 在 Makefile 的“i18n”目标中,我写了:
i18n:
@for file in $(wildcard ./lang/*.po); do\
msgfmt $$file -o $(subst po,mo,$$file); \
done
但是,此代码不起作用;此外,所有的 *.po 文件都被损坏了。
文件夹中有 3 个文件,我得到每个文件:
./lang/uk_UK.po:1:2: syntax error
./lang/uk_UK.po:2: line terminator inside the line
./lang/uk_UK.po:3: Unknown key word «G»
./lang/uk_UK.po:4: Unknown key word «P»
./lang/uk_UK.po:5: Unknown key word «A»
./lang/uk_UK.po:6: Unknown key word «Z»
./lang/uk_UK.po:9: line terminator inside the line
./lang/uk_UK.po:10: Unknown key word «Report»
./lang/uk_UK.po:11: Unknown key word «POT»
./lang/uk_UK.po:12: Unknown key word «PO»
./lang/uk_UK.po:13: Unknown key word «Last»
./lang/uk_UK.po:14: Unknown key word «Language»
./lang/uk_UK.po:15: Unknown key word «Language»
./lang/uk_UK.po:16: Unknown key word «MIME»
./lang/uk_UK.po:17: Unknown key word «Content»
./lang/uk_UK.po:18: Unknown key word «Content»
./lang/uk_UK.po:19: Unknown key word «Entangle»
./lang/uk_UK.po:20: Unknown key word «AES»
因此,该命令似乎在 msgfmt 获取文件之前对其进行了修改。
我花了很多时间尝试不同的解决方案。我遇到了三种类型的问题:
1) 语法错误 - 不正确的循环
2) 替换错误
3) 翻译文件损坏
我的代码有什么问题?
【问题讨论】:
-
定义“不起作用”。构建日志中有错误吗?
-
没有错误,没有响应 - 只是翻译文件损坏。
-
哦,其实有错误!在问题中查看它们。
-
问题似乎出在以下代码部分:$(subst po,mo,$$file)
-
$(subst)是一个 make 函数。您正在尝试在 shell 上下文中的 shell 变量上使用它。这行不通。
标签: shell makefile translation rename