― MozillaZine.jp フォーラムは Mozilla 製品に関する情報交換の場です ―



All times are UTC + 9 hours

新しいトピックを投稿する トピックへ返信する  [ 11 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2009年10月05日(月) 18:42 
オフライン

登録日時: 2008年8月24日(日) 21:09
記事: 33
ローカライズで単数形と複数形に対応するための Localization and Plurals を使おうとしたんですが、general.useragent.locale を en-US にして試したところ、単数でも複数でも単数の場合として処理されてしまいました。
以下のコードで調べたところ、規則の数が1になっていました。

コード:
Components.utils.import("resource://gre/modules/PluralForm.jsm");
var numForms = PluralForm.numForms();
      
alert(numForms);


バグかもしれませんがどうすればいいでしょう。

_________________
masahal
antispam826-public at yahoo.co.jp
http://masahal.web.fc2.com/


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2009年10月05日(月) 19:55 
オフライン
Administrator

登録日時: 2005年6月23日(木) 23:29
記事: 2724
お住まい: 東京
masahal さんが書きました:
ローカライズで単数形と複数形に対応するための Localization and Plurals を使おうとしたんですが、general.useragent.locale を en-US にして試したところ、単数でも複数でも単数の場合として処理されてしまいました。
以下のコードで調べたところ、規則の数が1になっていました。

コード:
Components.utils.import("resource://gre/modules/PluralForm.jsm");
var numForms = PluralForm.numForms();
      
alert(numForms);


バグかもしれませんがどうすればいいでしょう。

どの Firefox をお使いでしょうか?
1. Firefox 日本語版 (ja, ja-JP-mac)
2. Firefox 英語版 (en-US)
3. Firefox 英語版 (en-US) に日本語リソースを追加 (ja, ja-JP-mac)

3. の場合には、en-US の言語リソースを持っていません。再起動しても UI が日本語のままということからも理解していただけると思います。
当然 en-US の chrome/global/intl.properties もありません。使われるのは ja, ja-JP-mac の chrome/global/intl.properties です。
そのため、日本語ロケールの設定 pluralRule = 0 (1 形式) が使われます。

_________________
[Desktop] Windows 10 Pro 22H2 (64bit) / Intel Core i7-2600 / Nvidia GeForce GTX 1650 GDDR6 / 32 GB Memory
[Laptop] Windows 10 Pro 22H2 (64bit) / Intel Core i5-520M vPro / Intel HD Graphics / 8 GB Memory
[Android] Android 13.0 (arm64) / Xperia 5 III (XQ-BQ42)
常用環境: Firefox ベータ版、リリース版 (Win64 x86-64, Android), Thunderbird ベータ版、リリース版 (Win64 x86-64)
テスト環境: Firefox (ESR, Nightly, Win64 x86-64, Android)

Cai/1.0 (Homo sapiens; N; Homo sapiens chemist; male; rv:0.0.4.1+)
-- いつまでたっても nightly


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2009年10月05日(月) 21:10 
オフライン

登録日時: 2008年8月24日(日) 21:09
記事: 33
引用:
どの Firefox をお使いでしょうか?
1. Firefox 日本語版 (ja, ja-JP-mac)
2. Firefox 英語版 (en-US)
3. Firefox 英語版 (en-US) に日本語リソースを追加 (ja, ja-JP-mac)

「1. Firefox 日本語版 (ja, ja-JP-mac)」です。

引用:
3. の場合には、en-US の言語リソースを持っていません。再起動しても UI が日本語のままということからも理解していただけると思います。
当然 en-US の chrome/global/intl.properties もありません。使われるのは ja, ja-JP-mac の chrome/global/intl.properties です。
そのため、日本語ロケールの設定 pluralRule = 0 (1 形式) が使われます。


1. の場合には、と言うことですよね。
なるほどそういうことだと元と違う言語設定にしている人の場合ちゃんと動作しないから、 PluralForm は使わない方が無難ということみたいですね。ありがとうございました。

_________________
masahal
antispam826-public at yahoo.co.jp
http://masahal.web.fc2.com/


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2009年10月05日(月) 23:03 
オフライン

登録日時: 2008年8月24日(日) 21:09
記事: 33
でもやっぱりないとちょっと不便かな……。
何か代替手段とかないでしょうか。

_________________
masahal
antispam826-public at yahoo.co.jp
http://masahal.web.fc2.com/


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2009年10月06日(火) 00:52 
オフライン
Moderator

登録日時: 2006年10月29日(日) 21:56
記事: 472
masahal さんが書きました:
PluralForm は使わない方が無難ということみたいですね。

アドオンが言語リソースを持っていて、その言語に応じた plural rule を使いたいというような状況でしょうか。
もしそうでしたら、メソッド: makeGetter を見てください。


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2009年10月07日(水) 20:53 
オフライン

登録日時: 2008年8月24日(日) 21:09
記事: 33
あ さんが書きました:
アドオンが言語リソースを持っていて、その言語に応じた plural rule を使いたいというような状況でしょうか。
もしそうでしたら、メソッド: makeGetter を見てください。


特定の言語にだけ対応したいなら確かにこれでできますね。
一応以下のようなコードで対応することにしました。

コード:
var PluralFormGet, numForms;
//あらかじめ en-US ロケールの lang に言語名を登録しておき、それで言語を判定する。
//英語ならそれに対応した PluralForm.get 関数を取得
if(bundle.getString("lang")=="English") [PluralFormGet, numForms] = PluralForm.makeGetter(1);
else PluralFormGet = PluralForm.get;

var label = PluralFormGet(sampleNum,  bundle.getString("sampleText"));           
label = label.replace("#1", sampleNum);

_________________
masahal
antispam826-public at yahoo.co.jp
http://masahal.web.fc2.com/


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2009年10月31日(土) 08:10 
オフライン

登録日時: 2009年6月09日(火) 00:19
記事: 4
既に解決されているようですが、ちょっと気になったので。
masahal さんが書きました:
一応以下のようなコードで対応することにしました。

コード:
var PluralFormGet, numForms;
//あらかじめ en-US ロケールの lang に言語名を登録しておき、それで言語を判定する。
//英語ならそれに対応した PluralForm.get 関数を取得
if(bundle.getString("lang")=="English") [PluralFormGet, numForms] = PluralForm.makeGetter(1);
else PluralFormGet = PluralForm.get;

var label = PluralFormGet(sampleNum,  bundle.getString("sampleText"));           
label = label.replace("#1", sampleNum);
たしかにこの方法なら Firefox の英語以外の版で general.useragent.locale を en-US に設定しているという極めて特殊な状況でもアドオンが英語で正しく動くようになるかと思いますが、そういう設定をする人はまずいないので、最初の方法のままで正しかったと思います。この方法でも、多くの言語に対応するのが困難だという以外に実害は思いつきませんが。

日本語でも英語でも動作するアドオンを作る場合、 Cai さんのおっしゃる
Cai さんが書きました:
どの Firefox をお使いでしょうか?
1. Firefox 日本語版 (ja, ja-JP-mac)
2. Firefox 英語版 (en-US)
3. Firefox 英語版 (en-US) に日本語リソースを追加 (ja, ja-JP-mac)
の 3 番を使うのがお勧めです。こうしておけば Locale Switcher で簡単に言語を切り替えることもできます。

本当は日本語版に en-US のリソースを追加できると簡単なのですが、今のところなぜか en-US のリソースだけというのは公開されていないのでこの方法は不可能です。 Bug 485860 のせいらしいですが、よく理解していません。


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2009年11月02日(月) 00:46 
オフライン

登録日時: 2009年6月09日(火) 00:19
記事: 4
ごめんなさい、大嘘を書いておりました。

拡張機能では PluralForm.get ではなく PluralForm.makeGetter を使うのが正しいです。でないと、 Firefox のロケールと拡張機能のロケールが一致しない場合に正しく動作しません。というのを自分で拡張機能を書いたときにさんざん調べて理解したのに、もう忘れていました。

普通は、 makeGetter に渡す引数をロケールによって変えられるように、 stringbundle で読み込む properties ファイルに
コード:
pluralRule=1
のような設定を仕込んでおきます。そうすると、 JavaScript の側で言語によって場合分けをする必要がなくなり、多くのロケールに対応するのも容易になります。


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2009年11月30日(月) 09:12 
オフライン

登録日時: 2008年8月24日(日) 21:09
記事: 33
どうも、返信遅れてすいません。
fcp さんが書きました:
普通は、 makeGetter に渡す引数をロケールによって変えられるように、 stringbundle で読み込む properties ファイルに
コード:
pluralRule=1
のような設定を仕込んでおきます。そうすると、 JavaScript の側で言語によって場合分けをする必要がなくなり、多くのロケールに対応するのも容易になります。


あーなるほど、確かにこれなら多言語の対応も楽ですね。
ただBabellzillaで他の人にローカライズしてもらう時、何を意味してるのかわからってもらえないんじゃないかという気もします(まあそれは私の元の方法でも同じですけど)。

うーん、ローカライズのことまで考えると、書式がわかりにくいという問題もあるし、 PuralForm はやっぱり使わないほうが無難かなあ……。

_________________
masahal
antispam826-public at yahoo.co.jp
http://masahal.web.fc2.com/


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2009年12月12日(土) 07:45 
オフライン

登録日時: 2009年6月09日(火) 00:19
記事: 4
masahal さんが書きました:
うーん、ローカライズのことまで考えると、書式がわかりにくいという問題もあるし、 PuralForm はやっぱり使わないほうが無難かなあ……。
PluralForm が好みでないということでしたら、好みに口を出すつもりはありませんが、 PluralForm を使わなければどうするつもりなのでしょう。日本語と英語だけならともかく、多数の言語に対応しようとすると、 PluralForm を使わない方法は僕には思いつきません。

(複数形を正しくするのは諦める、というのは選択肢の一つだと思います。複数形が正しくなくてもソフトウェアは一応使えますし、どうせ複数形だけ正しくしたところで、言語を知らなければ完璧なローカライズなんてできませんし……。僕は BabelZilla でロシア語の翻訳者から「ロシア語の日付の格が間違っている」と言われていて、うまい直し方を思いつかず、ちょっとへこんでいます。が、それは別の話。)

masahal さんが書きました:
fcp さんが書きました:
普通は、 makeGetter に渡す引数をロケールによって変えられるように、 stringbundle で読み込む properties ファイルに
コード:
pluralRule=1
のような設定を仕込んでおきます。そうすると、 JavaScript の側で言語によって場合分けをする必要がなくなり、多くのロケールに対応するのも容易になります。


あーなるほど、確かにこれなら多言語の対応も楽ですね。
ただBabellzillaで他の人にローカライズしてもらう時、何を意味してるのかわからってもらえないんじゃないかという気もします(まあそれは私の元の方法でも同じですけど)。
僕は
コード:
# LOCALIZATION NOTE (pluralRule): Usually just copying from
# chrome://global/locale/intl.properties of your language should be enough.
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
pluralRule            = 1
と書いています (上のは en-US ロケールの場合です)。
意味が伝わらないかもと危惧していましたが、 BabelZilla ではみんな意味を理解してくれたみたいで、 pluralRule の値を自分で修正する必要はありませんでした。

ところで、前の書き込みで僕は「普通は」と書きましたが、少なくとも Mozilla Developer Center の記事「Localization and Plurals」にはこんな方法載っていませんね。普通ではないかもしれません。どうやってこの方法に辿り着いたのか覚えていませんが、たぶん何かの拡張機能でやっているのを真似たんだと思います。上の Usually just copying from ... の文章は自分で書いた覚えがあります (ので英語は間違っているかもしれません)。


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2009年12月15日(火) 03:42 
オフライン

登録日時: 2009年6月09日(火) 00:19
記事: 4
補足です。
fcp さんが書きました:
僕は
コード:
# LOCALIZATION NOTE (pluralRule): Usually just copying from
# chrome://global/locale/intl.properties of your language should be enough.
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
pluralRule            = 1
と書いています (上のは en-US ロケールの場合です)。
意味が伝わらないかもと危惧していましたが、 BabelZilla ではみんな意味を理解してくれたみたいで、 pluralRule の値を自分で修正する必要はありませんでした。
と書いた途端に修正する必要のありそうなケースに出会いました。しくしく。
本来 pluralRule=0 とするべき言語の一つで、 =1 のまま単数形と複数形に同じことを書いてきた人がいました。このままでも動作に支障はないはずですが、気持ちが悪いので、直してもらうよう翻訳者に頼むつもりです。


通報する
ページトップ
 プロフィール  
引用付きで返信する  
期間内表示:  ソート  
新しいトピックを投稿する トピックへ返信する  [ 11 件の記事 ] 

All times are UTC + 9 hours


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[1人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by MozillaZine.jp® Forum Software © phpBB Group , Almsamim WYSIWYG
Japanese translation principally by ocean