Posted on 5 月 23, 2010 in プログラミング, 社内 by K.NNo Comments »

前回は、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している箇所がある
次回は上記の修正方法について!


人気ブログランキングへ

システム開発・ホームページ作成のことなら 創屋株式会社 創屋ぷれす
AWS Amazon EC2/S3 クラウド のことなら 創屋株式会社
データマイニング テキストマイニング のことなら 創屋株式会社

マイマイ(My Mining/マイ マイニング)
議事録作成システム MYNA(マイナ)
【営業エリア】
北陸・東海・関東・近畿
石川県(加賀市・かほく市・金沢市・小松市・珠洲市・羽咋市・白山市・七尾市・能美市・輪島市・川北町・野々市町・津幡町・内灘町・志賀町・宝達志水町・中能登町・穴水町・能登町)
富山県・福井県
岐阜県・愛知県
東京都・神奈川県・千葉県・埼玉県・群馬県
大阪府・兵庫県・京都府・滋賀県・奈良県
Theme by Got Chance and Nitrogen DesignsPowered by Wordpress