我正在使用pootle来允许人们在PHP Yii项目中翻译.po文件。
翻译人员更新.po文件后,Pootle可以提取并推送翻译。 另外,我们有开发人员在网站上工作,他们也可以更新翻译文件以添加更多要翻译的文本。
Yii要求.po文件位于:
YII项目/保护/消息/ EN_GB / messages.po
Pootle要求目录结构为:
pootle / YII项目/ EN_GB / messages.po
为了吸引人们push,.git目录需要在pootle / yii-project / .git。
我尝试过使用git sparse checkout,但是这会把文件拉到pootle / yii-project / protected / messages / en_gb / messages.po,遗憾的是pootle没有拿起来。
我无法在其他位置拉动存储库,然后再使用softlink,因为那时pootle将无法找到.git目录。
我真正希望能够做的是稀疏检查目录并将结果映射到另一个目录,即结帐:
pootle / yii-project / protected / messages / - > pootle / YII项目
我不想使用git-subtree,因为我希望文件能够由开发人员或翻译人员更新。我不想使用子模块,因为我不喜欢额外的拉动开销,我们希望开发人员将所有更改包含在单个提交中的新功能(而不是主项目上的一个提交和一个在子模块上。)
有什么建议吗?
答案 0 :(得分:0)
我们找不到使用git sparsecheckout的解决方案。
相反,我们使用了子模块。
我们首先提取了yii-project / protected / messages目录,并创建了一个名为yii-project-translations的新存储库。
然后,我们降低了每个目录,包括翻译 - 例如:
git mv en_GB en_gb
然后我们将新的存储库作为子模块包含在原始的yii项目中:
cd yii-project/
git subtree split --prefix=protected/messages --branch=yii-project-translations
cd protected/
git rm -rf ./messages
mkdir messages
pushd messages
git init
git remote add origin git-server:yii-project-translations
git pull ../../ yii-project-translations
git push origin -u master
popd
并将此存储库克隆为pootle项目:
cd $POOTLE_HOME/translations/
git clone gitolite@git.algo.travel:yii-project-translations yii-project
最后,我们将pootle数据库中的几个表更新为小写目录名称,所以一切都很好:
update pootle_app_language set code = lower(code);
update pootle_app_directory set pootle_path = lower(pootle_path);
update pootle_app_translationproject set real_path = lower(real_path), pootle_path = lower(pootle_path);
@ michal-cihar - Weblate看起来很棒。如果我在沿着pootle路径获得90%之前遇到它,我会用它。谢谢!