2012-03-16 12 views
10

Necesito poner una pieza de texto dinámica en una cadena localizada, pero tiene que ir a diferentes lugares dependiendo del idioma.¿Cómo puedo poner un parámetro en una cadena localizada en Android?

Por ejemplo, necesito dos cadenas como:

Inglés: La hora actual es HH: mm: ss otro idioma: hh: mm: ss es la hora actual

puedo pensar en una enfoque, que es tener una cadena localizada preDate y postDate donde postDate está vacía en inglés y preDate está vacía en Otro. Esto funcionará, pero no parece muy elegante o escalable.

¿Hay una mejor manera de hacerlo?

Respuesta

33

Lo uso en mi recurso de cadena.

<string name="duration"><xliff:g id="minutes" example="42" >%s</xliff:g> mins <xliff:g id="seconds" example="28" >%s</xliff:g> secs</string> 

que imprime xx min seg yy cuando llame:

getString(R.string.duration, minutes, seconds); 

En otro idioma, se puede traducir al cambiar la ubicación de minutos y segundos. Debe imprimir, por ejemplo: min xx segundos yy

Un esquema debe ser incluir en el encabezado:

<resources xmlns:xliff="rn:oasis:names:tc:xliff:document:1.2"> 
+0

parece prometedor, pero cuando me pega que en mi strings.xml, me sale este error: 'error: Error de análisis XML: prefix' no unido – brianestey

+3

Es posible que desee incluir la xmlns: xliff en el encabezado. – Calvin

+0

Eso hizo el truco. Ya acepté la otra respuesta, pero también te he dado un voto positivo. – brianestey

0

Creo que está haciendo de la manera correcta.

Otro no tan bueno Soln es si se pone toda la cadena de formato en recursos como

Inglés: La hora actual es% d:% d:% d otro idioma:% d:% d:% d es la hora actual

En general, no me gusta este enfoque ya que ahora su código de formato se divide en dos lugares.

27

formato de cadenas XML androide correcta es <string name="tst">string %1$s integer %2$d</string>

+2

¡Intenté esto y funcionó como un encanto! Gracias. – brianestey

+0

Trabajando perfectamente, muchas gracias por la diferencia de cadena e entero –

Cuestiones relacionadas