2012-12-13 59 views
1

我正在使用pootle來允許人們在PHP Yii項目中翻譯.po文件。git sparsecheckout - 如何拉入不同的目錄

一旦翻譯者更新.po文件,Pootle可以拉和翻譯翻譯。 另外我們有開發人員在網站上工作,他們也可能會更新翻譯文件以添加更多要翻譯的文本。

Yii的要求.po文件必須位於:

警予項目/保護/消息/ EN_GB/messages.po

Pootle需要的目錄結構爲:

pootle /警予項目/ EN_GB/messages.po

爲了讓pootle執行&推送,.git目錄需要位於pootle/yii-project/.git中。

我已經嘗試使用git稀疏結帳,但是這會將文件拉入pootle/yii-project/protected/messages/en_gb/messages.po,不幸的是pootle沒有拿起。

我無法在其他地方執行資源庫的拉取操作,然後軟鏈接,因爲pootle將無法找到.git目錄。

我真的很希望能夠做的是一個目錄的稀疏結賬,結果映射到另一個目錄,即結賬:

pootle /警予項目/保護/消息/ - > pootle/yii-project

我不想使用git-subtree,因爲我希望能夠由開發人員或翻譯人員更新文件。我不想使用子模塊,因爲我不喜歡額外的拉開開銷,並且我們希望開發人員在一次提交中包含對新功能所做的所有更改(而不是主項目上的一次提交以及一個在子模塊上)。

有什麼建議嗎?

+0

是否有可能將這些目錄中的一個鏈接到另一個目錄? – mgarciaisaia

+0

@ desert69 - 不幸的是,.git目錄需要在pootle/yii-project中才能被pootle使用。如果我將pootle/yii-project軟鏈接到yii-project/protected/messages /,pootle將無法找到.git目錄 – dastra

+0

Pootle對Git和不同工作流的支持不足是我編寫Weblate的原因之一,所以你可以考慮使用它。請參閱http://weblate.org/ –

回答

0

我們找不到使用git sparsecheckout的解決方案。

相反,我們使用子模塊。

我們首先提取了yii-project/protected/messages目錄,並創建了一個名爲yii-project-translations的新存儲庫。

然後,我們小寫每個目錄包括翻譯的 - 例如:

git mv en_GB en_gb 

我們遂把新的存儲庫放回原警予項目作爲一個子模塊:

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 [email protected]:yii-project-translations yii-project 

Final LY,我們在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); 

@米哈爾 - cihar - Weblate看起來極好。如果我在我們沿​​着小路途徑獲得90%之前遇到它,我會使用它。謝謝!