2012-01-25 17 views
10

Wiem, że jest wsparcie w systemie Android dla 18n aplikacji, ale czy mogę podać parametry takiego łańcucha? W Railsach mogę zrobić coś takiego:Android: I18n z parametrami

en: 
    hello: "Hello %{name}! You've got %{count} messages." 

t("hello", name: "Klaus", count: 5) 

Czy jest coś podobnego w systemie Android lub czy muszę to zrobić sam?

Odpowiedz

12

Aby rozwinąć Odpowiedź Heiko, i pokazać konkretny przykład, jeśli chcesz mieć więcej niż jeden ciąg musisz je numerować:

<string name="hello">Hello %1$s! You've got %2$d messages.</string> 

W ten sposób możesz zmienić kolejność napisów w każdym tłumaczeniu. Używanie go będzie:

String hello = getString(R.strings.hello, "Klaus", 5); 
+0

Zgodnie z dokumentacją potrzebujesz tylko numeru, musisz zmienić kolejność elementów: _Argument index. Zwykle każdy specyfikator formatu zużywa następny argument do sformatowania. Dla wygodnej lokalizacji można zmienić kolejność argumentów, aby pojawiały się w innej kolejności na wyjściu niż kolejność, w jakiej zostały dostarczone. Na przykład "% 4 $ s" formatuje czwarty argument (4 $) jako ciąg (y). Możliwe jest również ponowne użycie argumentu z <. Na przykład format ("% o% neworld

4

Można zrobić to samo

W strings.xml można umieścić

<string name="xyz">Do you really want to report [%s] as spammer?</string> 

, a następnie w kodzie można umieścić

String foo = getString(R.strings.xyz,"Joe Doe"); 

Zobacz Context.getString()