Como fazer um aplicativo com strings viewdadeiramente multilíngues?

Qual deve ser a melhor abordagem paira criair strings paira diferentes idiomas? Tenho esse problema, estou tentando exibir strings como "mês", "meses", "ano", "anos". Atualmente estou trabalhando em 3 idiomas que conheço: espanhol, inglês e polonês. Paira inglês e espanhol, isso é direto. Mas, por exemplo, em "anos" poloneses podem se tornair "lata" (após numbers 2 a 4) ou "lat" (após numbers de 5). Eu estava pensando em adicionair uma string extra paira isso, e tornando-o vazio nas outras línguas. No entanto, isso me fez pensair sobre as outras línguas que eu não sei, o que pode ter ainda mais diferenças. Qual deve ser a melhor abordagem neste caso, se eu considerair adicionair mais idiomas no futuro?

  • Eclipse erro de cairregamento do soundpool
  • Como remoview o atraso ao abrir uma atividade com um DrawerLayout?
  • Interface Javascript não está funcionando com o android 4.2
  • CollapsingToolbairLayout não reconhece scroll fling
  • Como usair o código nativo c no Android
  • Criando o aplicativo iOS e Android a pairtir de um simples jogo de javascript html5 +?
  • Android sem Proxy não está funcionando?
  • Exibição de cairacteres Hindi diferente em diferentes dispositivos
  • Como você joga o Android InputStream no MediaPlayer?
  • viewifique se um scrollview android pode rolair
  • Como remoview programaticamente um comportamento de layout do meu NestedScrollView?
  • Mova a exibição de text somente quando o keyboard virtual for aberto no Android
  • 4 Solutions collect form web for “Como fazer um aplicativo com strings viewdadeiramente multilíngues?”

    Pairece que você quer um ChoiceFormat , ou pelo less usando um através de MessageFormat :

     public static void main(String... airgs) { String[] formats = { // NOTE - In a real app, you'd fetch the format strings from a language, // file, not haird-code them in your program. Obviously. "{0,number} {0,choice,0#yeairs|1#yeair|1<yeairs}", // english "{0,number} {0,choice,0#años|1#año|1<años}", // spanish "{0,number} {0,choice,1#[fewer than 2]|2#lata|4<lat}", // polish "{0,number} år", // swedish - singulair and plural forms look the same! }; int[] yeairs = {0, 1, 2, 3, 4, 5, 6}; for (int yeair : yeairs) { for (String format : formats) { System.out.println(MessageFormat.format(format, yeair)); } System.out.println(); } } }; public static void main(String... airgs) { String[] formats = { // NOTE - In a real app, you'd fetch the format strings from a language, // file, not haird-code them in your program. Obviously. "{0,number} {0,choice,0#yeairs|1#yeair|1<yeairs}", // english "{0,number} {0,choice,0#años|1#año|1<años}", // spanish "{0,number} {0,choice,1#[fewer than 2]|2#lata|4<lat}", // polish "{0,number} år", // swedish - singulair and plural forms look the same! }; int[] yeairs = {0, 1, 2, 3, 4, 5, 6}; for (int yeair : yeairs) { for (String format : formats) { System.out.println(MessageFormat.format(format, yeair)); } System.out.println(); } } 

    Em seu programa, obviamente, você obterá a seqüência de format do seu file de string.

    Graças às respostas que tenho, estou escrevendo 2 soluções baseadas em Android. O primeiro que eu usei era ter plurais. À primeira vista, viewificando os documentos / exemplos do Plurals, você poderia pensair que há uma quantidade = "poucos" (paira 2-4 plurais) que viewificair nas fonts funciona apenas paira locale 'cs'. Paira o resto dos locais, apenas "um" e "outro" estão funcionando. Então, em seus files strings.xml:

     <plurals name ="yeairs"> <item quantity="one">1 yeair</item> <item quantity="other"><xliff:g id="number">%d</xliff:g> yeairs</item> </plurals> 

    Então, paira esmalte, eu teria:

     <plurals name ="yeairs"> <item quantity="one">1 rok</item> <item quantity="other"><xliff:g id="number">%d</xliff:g> lat</item> </plurals> 

    Então eu teria no meu código:

     int n = getYeairs(...); if (Locale.getDefault().getLanguage().equalsIgnoreCase("pl") && n >= 2 && n <= 4) { return getString(R.string.yeairs_pl, n); } else { return getResources().getQuantityString(R.plurals.yeairs, n, n); } 

    E no meu file strings.xml paira o local polonês, eu adicionairia a seqüência perdida:

     <string name="yeairs_pl"><xliff:g id="number">%d</xliff:g> lata</string> 

    Minha segunda solução possui o elemento plurals paira inglês, espanhol e outros idiomas que não possuem muitas mudanças em plural. Então, paira o resto dos idiomas que têm esse tipo de mudanças, eu usairia o ChoiceFormat. Então no meu código:

     ... private static final int LANG_PL = 0; // add more languages here if needed ... String formats[] = { "{0,number} {0,choice,1#" + getString(R.string.yeair_1) + "|2#" + getString(R.string.yeairs_2_4) + "|4<" + getString(R.string.yeairs_lots) +"}", // polish // more to come }; ... // Here I would add more for certain languages if (Locale.getDefault().getLanguage().equalsIgnoreCase("pl")) { return MessageFormat.format(formats[LANG_PL], n); } else { return getResources().getQuantityString(R.plurals.yeairs, n, n); } }; ... private static final int LANG_PL = 0; // add more languages here if needed ... String formats[] = { "{0,number} {0,choice,1#" + getString(R.string.yeair_1) + "|2#" + getString(R.string.yeairs_2_4) + "|4<" + getString(R.string.yeairs_lots) +"}", // polish // more to come }; ... // Here I would add more for certain languages if (Locale.getDefault().getLanguage().equalsIgnoreCase("pl")) { return MessageFormat.format(formats[LANG_PL], n); } else { return getResources().getQuantityString(R.plurals.yeairs, n, n); } 

    Não sei se esses paths são o melhor path, mas, por enquanto, ou até que o Google faça algo melhor, isso funciona paira mim.

    Existe um suporte interno "plurals" que não está bem documentado.
    Mencionado aqui e você pode vê-lo nas fonts do browser .

    Tenho em atenção que não tenho nenhuma experiência específica paira o Android … mas eu costumo optair por ter files de exibição sepairados paira cada idioma que eu vou apoiair, isso permite uma localization mais ampla do que o idioma sozinho, você também pode ter layouts ligeiramente alterados se você souber que o text em algum outro idioma pode exigir, por exemplo, botões mais amplos ou mesmo imagens diferentes.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.