お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2008-01-30 21:52:10

mizuno
管理者
From: Kyoto
登録日: 2007-02-28

翻訳後のpoファイルを使用するとアプリが停止

現在 nano の翻訳をしています。
主要な部分は大体できたと思うので、po/mo ファイルを launchpad からダウンロードして(po は変換後) /usr/share/locale-langpack/ja/LC_MESSAGES/nano.mo として置きました。
翻訳は反映されているのですが、ヘルプ画面を呼び出そうとすると CPU 使用率が 100% となり、アプリが応答しなくなってしまいます。

1. LANG=C では問題ないので、日本語の翻訳が問題だと思う
2. Gutsy でも Hardy アルファ版でもおきるので、nano 本体のバージョンの差ではないと思う
3. 検索、ファイル読み込み、ファイルブラウザなど、すべてのヘルプ画面で起こるので特定の翻訳が問題ではない? と思う

現象から見て間違いなく mo ファイルが悪さをしているのですが、翻訳の仕方によってアプリの動作に悪影響が出るようなことはあるのでしょうか?
また、なんとかして解消しなければならないのですが、原因を特定するにはどのような方法がありますでしょうか?

オフライン

 

#2 2008-01-31 09:45:27

mizuno
管理者
From: Kyoto
登録日: 2007-02-28

Re: 翻訳後のpoファイルを使用するとアプリが停止

po ファイルを一行ずつ削りながら様子を見ることを繰り替えしてみました。
どうやら複数行に渡るメッセージにおかしいものがあるようです。

# どのヘルプでも止まってしまうのは、全てのヘルプに不正なものが含まれているからのようです

例えば以下のようなものがダメでした。

コード:

#: src/help.c:238
msgid ""
"Search Command Help Text\n"
"\n"
" Enter the words or characters you would like to search for, and then press "
"Enter.  If there is a match for the text you entered, the screen will be "
"updated to the location of the nearest match for the search string.\n"
"\n"
" The previous search string will be shown in brackets after the search "
"prompt.  Hitting Enter without entering any text will perform the previous "
"search.  "
msgstr ""
"検索コマンドのヘルプ\n"
"\n"
" "
"検索したい単語か文字を入力してエンターを押してください。もし検索語にマッチするテキストが見つかったならば、カーソルが見つかったテキストの位置へ移動します。"
"\n"
"\n"
" テキストを検索する方向は検索プロンプトの表示で見分けることができます。検索語を何も入力せずにエンターを押すと、前回の検索語が使用されます。  "

これが Launchpad が生成した po なのですが、何が悪いのか解りません。
行数が違っているのがまずいのかと思い、""を追加して行を分けてみても状態は変わりません。が、msgstr 以下をまるごと消すと動いたりするので、何かが悪いのは間違いないと思います。
Launchpad 上で、改行やスペースの入れ方はテンプレートに従っているのですが、それだけでは不十分なのでしょうか?

オフライン

 

#3 2008-01-31 13:23:26

jkbys
管理者
登録日: 2006-10-05

Re: 翻訳後のpoファイルを使用するとアプリが停止

デバッグシンボルつきでコンパイルしたnanoで再現させ、GDBでアタッチしてみました。
明確な原因までは分かりませんでしたが、nanoのマルチバイト文字列処理に問題があり、無限ループに陥っているように見えます。
Launchpadに登録されている翻訳がLanguage Packに反映されるのを待って、再度確認の上バグとして報告したいと思います。

オフライン

 

#4 2008-01-31 16:44:44

mizuno
管理者
From: Kyoto
登録日: 2007-02-28

Re: 翻訳後のpoファイルを使用するとアプリが停止

nano のソース側の問題だったのですね。ということでこちらもデバッガで追ってみました。

一行のカラム数(デフォルト 79、最低 24)以上の、空白や改行を含まない文字列を表示しようとした際に、文字列ポインタが先頭(直前の空白)まで戻されてしまい、結果無限ループになっているようです。英文字だと単語間にスペースが入るので問題ないのでしょうね。
(src/text.c break_line 関数のあたり)

オフライン

 

#5 2008-02-03 15:47:52

mizuno
管理者
From: Kyoto
登録日: 2007-02-28

Re: 翻訳後のpoファイルを使用するとアプリが停止

Hardy Alpha 4 のディスクに含まれるパッケージに翻訳が反映されていることを確認しました。nano のヘルプを表示させると止まってしまいます。
日本語で改善プロジェクトにバグ登録をしました。

最後の編集者: mizuno (2008-02-03 21:40:36)

オフライン

 

Board footer

Powered by FluxBB