Можно ли создавать переводимые произвольные ресурсы XML в Android Studio? - PullRequest
1 голос
/ 16 мая 2019

Я хочу создать приложение, которое задает пользовательские вопросы, оценивает ответы и потенциально реагирует на них, представляя последующие вопросы. Для этого я подумал о чем-то вроде следующего XML в res/xml/questions.xml:

<?xml version="1.0" encoding="utf-8"?>
<questions>
    <question id="000" category="2">
        <text>Yes or no?</text>
        <answers>
            <choice id="0" score="+5">Yes</choice>
            <choice id="1" score="-5">No</choice>
        </answers>
    </question>
    <question id="010" category="1">
        <parent id="000" choice="0"/>
        <text>Whats my question?</text>
        <answers>
            <choice id="0" score="-5">Shut up.</choice>
            <choice id="1" score="0">I don't care.</choice>
            <choice id="2" score="+5">I like your attitude!</choice>
        </answers>
    </question>
</questions>

Я хочу поддерживать несколько языков. Как я могу перевести содержимое <text> и <choice> без переопределения одной и той же логики в разных XML-файлах? (Или мне вообще следует отказаться от XML-подхода?)

1 Ответ

1 голос
/ 16 мая 2019

Вот несколько вариантов:

Опция # 1: иметь res/xml/questions.xml и другие варианты этого XML для разных языков (например, res/xml-es/questions.xml, res/xml-de/questions.xml, res/xml-zh/questions.xml)

Вариант № 2: Если у вас есть английские строки, вместо них есть значения, которые отображаются на строковые ресурсы.Таким образом, res/xml/questions.xml может выглядеть следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<questions>
    <question id="000" category="2">
        <text>question_000</text>
        <answers>
            <choice id="0" score="+5">question_000_choice_0</choice>
            <choice id="1" score="-5">question_000_choice_1</choice>
        </answers>
    </question>
    <question id="010" category="1">
        <parent id="000" choice="0"/>
        <text>question_010</text>
        <answers>
            <choice id="0" score="-5">question_010_choice_0</choice>
            <choice id="1" score="0">question_010_choice_1</choice>
            <choice id="2" score="+5">question_010_choice_2</choice>
        </answers>
    </question>
</questions>

Тогда у вас будут строковые ресурсы для question_000, question_000_choice_0 и так далее.Когда вы анализируете XML, вы затем используете getIdentifier() на объекте Resources, чтобы найти идентификатор строкового ресурса, соответствующий чему-то вроде question_000_choice_0.

Вариант № 3: XML просто описывает основы:

<?xml version="1.0" encoding="utf-8"?>
<questions>
    <question id="000" category="2">
        <answers>
            <choice id="0" score="+5" />
            <choice id="1" score="-5" />
        </answers>
    </question>
    <question id="010" category="1">
        <parent id="000" choice="0"/>
        <answers>
            <choice id="0" score="-5" />
            <choice id="1" score="0" />
            <choice id="2" score="+5" />
        </answers>
    </question>
</questions>

У вас все еще будут строковые ресурсы для question_000, question_000_choice_0 и т. Д.Однако вместо того, чтобы иметь эти имена в XML, вы просто сгенерируете их из идентификаторов вопроса и выбора.

...