質問: joomla 3で欠落している翻訳文字列を特定して特定する 私のサイトには、ノルウェー語と英語の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"; } } }