¿Son posibles los parámetros en strings.xml?

En mi aplicación de Android voy a implementar mis cadenas con la internacionalización. Así que actualmente tengo un problema con la gramática y la forma en que se construyen las oraciones en diferentes idiomas.

Por ejemplo:

“Hace 5 minutos” – Inglés

“vor 5 Minuten” – alemán

¿Puedo hacer algo como lo siguiente en strings.xml?

{0} minutes ago 

Y luego algo de magia como

 getString(R.id.timeFormat, dynamicTimeValue) 

Este comportamiento también resolvería el otro problema con diferentes órdenes de palabras.

Sí, solo formatee sus cadenas en el modo estándar String.format() .

Consulte el método Context.getString(int, Object...) y la documentación de Android o Java Formatter .

En su caso, la definición de cadena sería:

 %1$d minutes ago 

Si necesita dos variables en el XML, puede usar:

%1$d text... %2$d o %1$s text... %2$s para variables de cadena.

Ejemplo:

strings.xml

 Website %1$s isn\'t yet available, I\'m working on it, please wait %2$s more days 

activity.java

 String site = "mywebsite"; String days = "11"; //Toast example String notyet = getString(R.string.notyet, site, days); Toast.makeText(getApplicationContext(), notyet, Toast.LENGTH_LONG).show(); 

PD: lee el comentario de Flaxie a continuación

Si necesita formatear sus cadenas usando String.format (String, Object …), puede hacerlo colocando sus argumentos de formato en el recurso de cadena. Por ejemplo, con el siguiente recurso:

 Hello, %1$s! You have %2$d new messages. 

En este ejemplo, la cadena de formato tiene dos argumentos:% 1 $ s es una cadena y% 2 $ d es un número decimal. Puede formatear la cadena con argumentos de su aplicación de esta manera:

 Resources res = getResources(); String text = String.format(res.getString(R.string.welcome_messages), username, mailCount); 

Si desea más información, consulte: http://developer.android.com/intl/pt-br/guide/topics/resources/string-resource.html#FormattingAndStyling

Tenga en cuenta que para esta aplicación en particular hay una función de biblioteca estándar, android.text.format.DateUtils.getRelativeTimeSpanString() .

Hay muchas maneras de usarlo y le recomiendo que vea esta documentación sobre el Formato de cadena.

http://developer.android.com/intl/pt-br/reference/java/util/Formatter.html

Pero, si solo necesita una variable, necesitará usar% [type] donde [type] podría ser cualquier Flag (vea Tipos de banderas dentro del sitio arriba). (es decir, “Mi nombre es % s ” o para establecer mi nombre MAYÚSCULAS, use esto “Mi nombre es % S “)

 Hello, %1$S! You have %2$d new message(s) and your quote is %3$.2f%%. Hello, ANDROID! You have 1 new message(s) and your quote is 80,50%.