2012-03-16 6 views
10

Мне нужно поместить динамическую часть текста в локализованную строку, но она должна идти в разные места в зависимости от языка.Как я могу поместить параметр в локализованную строку в Android?

Например, мне нужны две строки, как:

English: Текущее время HH: мм: сс Другой Язык: HH: мм: сс текущее время

я могу думать об одном подход, который должен иметь локализованную строку preDate и postDate, где postDate пуст на английском языке, а preDate пуст в Other. Это будет работать, но не кажется очень элегантным или масштабируемым.

Есть ли лучший способ сделать это?

ответ

33

Я использую это в своем ресурсе строки.

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

который печатает хх минут уу ИКС, когда вы звоните:

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

В другом языке, вы можете перевести его, изменив расположение минут и секунд. Он должен печатать, например: мин хх секунд уу

Схема должна быть включать в заголовок:

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

выглядит многообещающим, но когда я вставляю, что в моем strings.xml, я получаю эту ошибку: 'ошибка: Ошибка синтаксического анализа XML: несвязанный prefix' – brianestey

+3

Вы можете включать xmlns: xliff в заголовке. – Calvin

+0

Это сделало трюк. Я уже принял другой ответ, но я тоже дал вам вылет. – brianestey

0

Я думаю, что вы делаете правильный путь.

Другие не так хорошо SOLN, если вы поместите всю строку формата в ресурсах, как

English: Текущее время% d:% d:% d Другой язык:% d:% d:% d является текущее время

Мне вообще не нравится этот подход, так как теперь ваш код форматирования разбит на два места.

27

Правильный андроид формат XML строки является <string name="tst">string %1$s integer %2$d</string>

+2

Я пробовал это, и это работало как шарм! Благодарю. – brianestey

+0

Отлично работает, большое спасибо за разницу в String и Integer –