私のアプリケーションを最初から翻訳しやすいように構築しなかったという過ちを犯したため、今、遡及的にそうするという困難なプロセスの真っ只中にいます...
私のアプリケーションには音声の認識が含まれているため、おそらくより一般的なレイアウトや説明だけでなく、コード自体の中で言語の差異が一般的です。
したがって、私はおそらく、XML 文字列リソースを使用することによるパフォーマンス コストと、言語ごとに新しいコード/クラスを作成する膨大な労力を比較検討することのパフォーマンス コストについて、他の人よりも懸念しています。
以下はクラスの例です。少し想像力を働かせれば、私の困惑を理解していただけると思います。
private static Pattern pWIFI = Pattern.compile(".*\\bwifi\\b.*");
private static Pattern pMOBD = Pattern.compile(".*\\bdata\\b.*");
private static Pattern pBLUE = Pattern.compile(".*\\bbluetooth\\b.*");
private static Pattern pAIRPLANE = Pattern.compile(".*\\bairplane\\b.*");
private static Pattern pAEROPLANE = Pattern.compile(".*\\baeroplane\\b.*");
public class MatchingAndReplacingStuff {
for (String vd : voiceData) {
vd = vd.toLowerCase(loc).trim();
if (vd.startsWith(ctx.getString(R.string.KEYBOARD_)) || vd.startsWith(ctx.getString(R.string.KEY_BOARD_))
|| vd.startsWith(ctx.getString(R.string.KEYBOARDS_))
|| vd.startsWith(ctx.getString(R.string.KEY_BOARDS_)) || vd.startsWith(ctx.getString(R.string.KEYBORD_))
|| vd.startsWith(ctx.getString(R.string.KEYBORDS_))) {
vd = vd.replaceFirst(ctx.getString(R.string.KEYBOARDS_), "");
vd = vd.replaceFirst(ctx.getString(R.string.KEYBOARD_), "");
vd = vd.replaceFirst(ctx.getString(R.string.KEY_BOARD_), "");
vd = vd.replaceFirst(ctx.getString(R.string.KEY_BOARDS_), "");
vd = vd.replaceFirst(ctx.getString(R.string.KEYBORD_), "");
vd = vd.replaceFirst(ctx.getString(R.string.KEYBORDS_), "");
vd = vd.replaceFirst(ctx.getString(R.string.GOOGLE_VOICE_TYPING), ctx.getString(R.string.GOOGLE_SEARCH));
vd = vd.replaceFirst(ctx.getString(R.string.VOICE_TYPING), ctx.getString(R.string.GOOGLE_SEARCH));
vd = vd.replaceFirst(ctx.getString(R.string.VOICE_INPUT), ctx.getString(R.string.GOOGLE_SEARCH));
vd = vd.replaceFirst(ctx.getString(R.string.VOICE_KEYBOARD), ctx.getString(R.string.GOOGLE_SEARCH));
vd = vd.replaceFirst(ctx.getString(R.string.VOICE_KEYBORD), ctx.getString(R.string.GOOGLE_SEARCH));
vd = vd.replaceFirst(ctx.getString(R.string.VOICE_KEY_BOARD), ctx.getString(R.string.GOOGLE_SEARCH));
voiceDataUpdated.add(vd.trim());
}
}
// loop again and compare Strings in voiceDataUpdated to Patterns compiled above
}
Bluetooth と WiFi、および上記の他のすべての R.String が各言語で異なるという仮定の下で、次のパフォーマンス/正確性/翻訳の問題が発生します。
1)ctx.getString(R.string
ループの前にそれぞれを文字列に割り当てる必要がありますか? 音声データ文字列の最大数は約 30 です。パフォーマンスは考慮する価値がありますか? 将来この質問を読む他の人にとって、考慮すべきしきい値はありますか?
2) (文字列リソースを取得するときに) パターンをコンパイルするためにコンテキストが必要になるため、次のバリエーションは可能ですか?
Pattern.compile(".*\\bctx.getString(R.string.SOMETHING\\b.*"); <-- pseudo code
3) 質問 2 に対する答えが「いいえ」であるが、パターンをそのような方法でコンパイルできる場合、それらをコンパイルするか、代わりに比較するために単に String を構築する必要がありますか?
最後の質問は次のとおりです。最大 300 エントリの文字列配列をループ処理しているため、パフォーマンスを完全に忘れてはいけません (理にかなった範囲内で)!?
^ コードを作成するときは、読みやすさとパフォーマンスの間で満足できる中間点を見つけると思いたいのですが、もしパフォーマンスを忘れてしまった場合 (上記のみと、ループのサイズが限られているため)、実際にはいくつかのコードが必要になります。人々はそれが正しいことだと私に保証してくれます!!
よろしくお願いします