私のサイトには、ノルウェー語と英語の2つの言語があります。コンポーネントクリエーターを使用して新しいコンポーネントを開発していますが、翻訳に問題があります。英語のファイルは新しい行で更新されますが、ノルウェー語の翻訳は手動で更新します。
以前のバージョンのJoomlaでは、翻訳定数が常に表示されるため、欠落した文字列を見つけるのは非常に簡単でした。ただし、joomla 3.2( http://docs.joomla.org/Specification_of_language_files )以降、正しい言語の文字列が見つからない場合、英語の翻訳が常にフォールバックとして使用されます。そこで、不足している文字列を手動で見つけるために、表示された値を英語の翻訳ファイルで検索し、この検索のヒットごとに、翻訳定数がノルウェー語ファイルに存在するかどうかを確認します。
うまくいけば、欠落している翻訳文字列を見つけるより良い方法があると思いますか?
言語ファイルを更新し続ける苦労を軽減するために、いくつかの機能(Linux)スクリプトがあります。
コンポーネントからタグを抽出するには:
#!/bin/bash
find .../TEMP/com_mycomponent -name "*.php" | xargs grep -o 'COM_MYCOMPONENT_[A-Z0-9\_]\+' | cut -d':' -f2 | sort -u > tags
find .../TEMP/com_mycomponent -name "*.xml" | xargs grep -o 'COM_MYCOMPONENT_[A-Z0-9\_]\+' | cut -d':' -f2 | sort -u >> tags
重複、欠落しているタグ、コンテンツの違いを確認するには:
// Duplicated check
$ini_file = file_get_contents("es-ES.com_mycomponent.ini");
$ini_lines = explode("\n", $ini_file);
$duplicated = array();
foreach ($ini_lines as $line)
{
$parts = explode('=', $line);
if (count($parts) != 2)
{
continue;
}
$k = $parts[0];
$v = $parts[1];
if (array_key_exists($k, $duplicated))
{
echo 'DUPLICATED: ' . $k . '=' . $duplicated[$k] . "\n";
echo 'DUPLICATED: ' . $k . '=' . $v . "\n";
}
else
{
$duplicated[$k] = $v;
}
}
// Parse without sections
$ini_array1 = parse_ini_file("en-GB.com_mycomponent.ini");
$ini_array2 = parse_ini_file("es-ES.com_mycomponent.ini");
$ini_array1k = array_keys($ini_array1);
$ini_array2k = array_keys($ini_array2);
$results = array_diff($ini_array1k, $ini_array2k);
foreach ($results as $result)
{
echo $result . "=\"" . $ini_array1[$result] . "\"\n";
}
if (count($results) == 0)
{
foreach ($ini_array1k as $key)
{
$cpo1 = substr_count($ini_array1[$key], '%');
$cpo2 = substr_count($ini_array2[$key], '%');
$cpe1 = substr_count($ini_array1[$key], '$');
$cpe2 = substr_count($ini_array2[$key], '$');
$cpbo1 = substr_count($ini_array1[$key], '{');
$cpbo2 = substr_count($ini_array2[$key], '{');
$cpbc1 = substr_count($ini_array1[$key], '}');
$cpbc2 = substr_count($ini_array2[$key], '}');
$cpme1 = substr_count($ini_array1[$key], '<');
$cpme2 = substr_count($ini_array2[$key], '<');
$cpma1 = substr_count($ini_array1[$key], '>');
$cpma2 = substr_count($ini_array2[$key], '>');
$cpqqq1 = substr_count($ini_array1[$key], 'QQQ');
$cpqqq2 = substr_count($ini_array2[$key], 'QQQ');
if (($cpo1 != $cpo2) || ($cpe1 != $cpe2) || ($cpbo1 != $cpbo2) || ($cpbc1 != $cpbc2) || ($cpma1 != $cpma2) || ($cpme1 != $cpme2) || ($cpqqq1 != $cpqqq2))
{
echo 'ERROR: ' . $key . "=\"" . $ini_array1[$key] . "\"\n";
echo 'ERROR: ' . $key . "=\"" . $ini_array2[$key] . "\"\n\n";
}
}
}
私はこれを行うための「ジョームラの方法」を考えることはできません。これは主に、開発プロセスをどのように編成するかを示しています。
したがって、開発中は新しい言語文字列が利用可能になる可能性があるため、英語のxmlの完成に集中し、完了したらそれをコピー(複製)して他の言語の親戚を作成し、それらをxml。
不完全な言語ファイルについて、不足しているものを見つけるために、スクリプトを作成する代わりに、それらをコピー-Excelに貼り付け、アルファベット順またはその他の順序で並べ替えて、比較に便利です。次に、他の言語ファイルから欠落している定数を簡単に見つけることができます。
com_localise
をご覧ください。これは、JoomlaコアとJoomla自体の拡張機能を翻訳するための拡張機能です。リポジトリで入手できます: https://github.com/joomla-projects/com_localise
それは現在一生懸命に作り直されていますが、私の理解からそれはかなりうまくいくはずです。