Contenu connexe
Similaire à US進出でのAndroid開発inメルカリ Mercari US App Development (20)
US進出でのAndroid開発inメルカリ Mercari US App Development
- 2. 自己紹介
• 株式会社メルカリ Android エンジニア(2014.3 )
!
!
!
!
!
!
• 以前はSIerでインフラ系DBエンジニア(たまにjava開発)
2
twitter: tomoaki_imai
github: tomoima525
qiita: tomoima525
フリマアプリの機能開発、USアプリ開発
- 9. 言語対応は甘くない
• ①表記の国、文化的違い
- 値段 小数点有りドル $ 1,200.00
- 日付 JP 2014/12/05 -> 12/14/2014
- マイナス表記 ☓ - $12 ⃝ ($12)
- バリデーション関連 (zipcode等) etc
!
• ②翻訳チームとの協業
- strings.xml操作にgithubはハードル高い
- エンジニアの翻訳取込負担も上げたくない
9
- 10. ①表記の国、文化的違いへの対応
• ヘルパー関数の実装
10
public abstract class StringFormatHelper {
public abstract String formatPrice(int price); //JP,USで実装が異なるものはabstract
public static final StringFormatHelper getInstance(){
StringFormatHelper sfh;
switch (Config.LOCALE_ID) {
case Const.LOCALE_JP:
sfh = new StringFormatHelperJP();
break;
case Const.LOCALE_US:
sfh = new StringFormatHelperUS();
break;
default:
sfh = new StringFormatHelperJP();
break;
}
return sfh;
}
}
インスタンス化の際にクラスを呼び分ける
- 11. • ヘルパー関数の実装
11
US,JPの各Helperクラスでそれぞれの処理を実装
public class StringFormatHelperUS extends StringFormatHelper {
private static NumberFormat COMMA_FORMAT
= new DecimalFormat("$#,###.##;($#,###.##)");
@Override
public String formatPrice(int price) {
//USで必要な処理を実装
}
}
StringFormatHelper sfh = StringFormatHelper.getInstance();
String currentSalesStr = sfh.formatPrice(currentSales);
利用時はインスタンスを生成して利用
Android Studio ならGradleのflavorを使う手もある
共通メソッドを1クラスで書けるメリットはあり
①表記の国、文化的違いへの対応
- 13. ②翻訳チームとの協業
• 良いところ
13
<!̶- value/strings.xml ̶>
<string name= format_address >住所1: %1$s 住所2: %2$s</string>
<!̶- value-en/strings.xml ̶>
<string name= format_address"> Address1:%1$s %2$s </string> //%2$sが不要でも必須
• もうちょっとなところ
- strings.xmlのformat数をUS,JPで合わせないとエラーがでる
- 変換に十分対応していないファイル形式(json等)がある
- 翻訳を当て込む作業が自動化され、ミスが軽減
- 訳した内容をその場で実機確認できる
- 22. 並行開発で気づいたこと
• 開発中も容易にUS - JP切り替えられるの超大事
- 開発する機能の多くは共通
- 常にUS, JP両方を確認できれば、後戻りが減る
• Eclipseで柔軟な環境切替は面倒
• が、全部のリソースを切替える必要はない
22
- 24. 更に気軽に切替できるように試みた
• デバッグモードでロケール切替の仕組み
- アプリ起動中にJP-USが切替えられる
24
public class ThisApplication extends Application {
private int mLocale = Const.LOCALE_JP;
public void setAppLocale(int locale){
mLocale = locale;
Locale l;
switch(locale){
case Const.LOCALE_JP:
l = Locale.JAPAN;
break;
case Const.LOCALE_US:
l = Locale.US;
break;
}
Locale.setDefault(l);
Configuration config = new Configuration();
config.locale = l;
getResources().updateConfiguration(config, null);
}
}
Application内で言語設定を切替える
仕組み