創屋ぷれす

Jahshakaビルド環境構築6(日本語化)

前回は、KDevelopのお話。今回はjahshakaを日本語化してみましょう!(ごく一部)

Jahshakaは一応多言語に対応しているんですが(Jahshaka起動してPreferencesで切り替えできる)、その中に日本語は含まれていません。また、多言語化も全部翻訳されているかというと結構怪しいです。

さてJahshakaはどういった仕組みで多言対応しているかというと、以下のソースでif文で言語を切り分け、
jahshaka\source\Jahshaka\JahLibraries\jahtranslate\jahtranslate.cpp
//now we all the respective translator
QString JahTranslate::tr(QString text) throw()
{
QString translated;
switch(theLanguage) {
case ENGLISH : { translated = text; break; }
case FRENCH : { translated = translateFrench(text); break; }
...
default : { translated = text; break; }
}
return translated;
}
言語ごとに作成されているソース(jahtranslate***)から指定された文字に対応する翻訳文字を返しています。
jahshaka\source\Jahshaka\JahLibraries\jahtranslate\jahtranslateFrench.cpp
if ( lang == "load" ) { lang = "Importer"; langchange = true; }
if ( lang == "save" ) { lang = "Enregistre"; langchange = true; }
...
単純な仕組みですね。
ということで、日本語化するには以下のようにします。
適当な言語ファイルをコピーして、jahtranslateJapanese.cppを作成し、中身を書き換える。
jahshaka\source\Jahshaka\JahLibraries\jahtranslate\jahtranslateJapanese.cpp
QString JahTranslate::translateJapanese(QString text) throw()
{
QString lang = text.lower();
bool langchange = false;
...
if ( lang == "load" ) { lang = "開く"; langchange = true; }
if ( lang == "save" ) { lang = "保存"; langchange = true; }
...
// add
if (langchange) {
QTextCodec* tc = QTextCodec::codecForLocale();
lang = tc->toUnicode(lang);
}
return lang;
}
最後に追加したif文はSuse10.1がUTF-8なので、そのまま表示すると文字化けしてしまうための対応。

ヘッダの修正。
jahshaka\source\Jahshaka\JahLibraries\jahtranslate\jahtranslate.h
//enum JahLanguage { ENGLISH, SPANISH, FRENCH, PORTUGUESE, GERMAN, ITALIAN };
enum JahLanguage { ENGLISH, SPANISH, FRENCH, PORTUGUESE, GERMAN, ITALIAN, JAPANESE };
class JahTranslate
{
...
// add
QString translateJapanese ( QString text ) throw();
};
enumの項目JAPANESE追加とtranslateJapanese関数を宣言。

分岐処理の修正
jahshaka\source\Jahshaka\JahLibraries\jahtranslate\jahtranslate.cpp
bool JahTranslate::setLanguage(QString text) throw()
{
QString lang = text.lower();
bool langchange = false;
if ( lang == "english" ) { theLanguage = ENGLISH; langchange = true; }
...
// add
if ( lang == "japanese" ) { theLanguage = JAPANESE; langchange = true; }
if (!langchange) { theLanguage = ENGLISH; }
return langchange;
}
//now we all the respective translator
QString JahTranslate::tr(QString text) throw()
{
QString translated;
switch(theLanguage) {
case ENGLISH : { translated = text; break; }
...
// add
case JAPANESE : { translated = translateJapanese(text); break; }
default : { translated = text; break; }
}
return translated;
}

ファイルを追加したのでMakefileに反映するために、jahtranslate.proに以下のように追加。
SOURCES = jahtranslate.cpp \
jahtranslateFrench.cpp \
jahtranslateGerman.cpp \
jahtranslatePortuguese.cpp \
jahtranslateSpanish.cpp \
jahtranslateItalian.cpp \ <--\を追加 jahtranslateJapanese.cpp <-- 記述を追加

以上で日本語化できるはず…と思ったら甘かった。起動して確認するといろいろな箇所で???と表示されたり、英語のままだったりします。
原因は、

  • 翻訳処理を通していない箇所がいっぱいある
  • 二重にtrしている箇所がある

次回は上記の修正方法について!

Comments are closed.