Android динамически создает массив строк из строковых ресурсов XML без массива строк XML.

Итак, этот вопрос немного странный, и мне как бы неловко даже задавать его, но, поскольку у меня, вероятно, нет выбора, я хочу узнать, что вы, ребята, думаете. Я все еще новичок в Java и Android.

Дело в следующем: мы пытаемся автоматизировать сборку нашего strings.xml для локализации. Сделан парсер для преобразования csv-файла в xml. Для обычных строк это не проблема, все работает. Но построенный синтаксический анализатор не учитывает строковые массивы, и маловероятно, что кто-то его изменит.

Есть ли «простой» способ работать со строками и создавать программный массив строк на основе частей атрибутов имени?

Если нет, то мне пришлось бы жестко кодировать массивы, и это оставляет создателя (клиента) языковых файлов неспособным добавлять элементы в то, что должно быть динамическим списком.

Я знаю, что изменение файла strings.xml вручную может быть вариантом, но, поскольку наше руководство хочет автоматизировать такие вещи, у меня нет особого выбора.

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

Спасибо за ваши мнения или решения. :)

Ваше здоровье!


person StingRay5    schedule 19.01.2012    source источник
comment
strings.xml будет создан во время работы приложения или перед сборкой проекта? пожалуйста, проясните это.   -  person Yugandhar Babu    schedule 19.01.2012
comment
Здравствуйте, извините, файл strings.xml создается перед сборкой проекта, но он должен быть проанализирован другим приложением. Итак, теоретически я мог бы изменить xml вручную, но это не так, как они хотят, чтобы он работал. Потому что нам пришлось бы взимать плату с клиента каждый раз, когда выпускается новая итерация продукта, в то время как они уже сделали файл strings.   -  person StingRay5    schedule 19.01.2012


Ответы (2)


Таким образом, вы получите strings.xml, как показано ниже.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="string1">1st string</string>
    <string name="string2">2nd string</string>
                 ........
    <string name="stringN">Nth string</string>
</resources>

Я предлагаю простую модификацию strings.xml, которая заключается в добавлении строки с количеством имен поверх всех строк со значением, равным общему количеству строк, и добавлении еще одной строки с префиксом имени под счетчиком, тогда это выглядит так, как показано ниже.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="count">4</string>
    <string name="prefix">string</string>
    <string name="string1">1st string</string>
    <string name="string2">2nd string</string>
    <string name="string3">3rd string</string>
    <string name="string4">4th string</string>
</resources>

Итак, теперь в вашем java-файле вы можете получить к ним доступ, как показано ниже.

int count = Integer.parseInt(getString(R.string.count));
        String prefix = getString(R.string.prefix);
        String[] strings = new String[count];
        for (int i = 0; i < count; i++) {
            strings[i] = getString(getResources().getIdentifier(prefix+(i+1), "string", getPackageName()));
        }

Я надеюсь, что это может помочь вам.

person Yugandhar Babu    schedule 20.01.2012
comment
Это имеет смысл, оно почти такое же, как решение, представленное Йенсом, но ваше немного более полное. Спасибо! Как я и думал, мы не будем включать это в нашу первую версию приложения, но это актуальное решение, которое я хотел бы увидеть в будущем обновлении версии. :) Спасибо! - person StingRay5; 23.01.2012

Вы можете использовать (и действительно очень действительно в любом случае) ссылки в строковых массивах. Предполагая, что это ваш сгенерированный res/values/strings.xml на шведском языке:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="string1">Hej, detta är på svenska</string>
    <string name="string2">Denna strängen också</string>
</resources>

Вы можете вставить string-array, например, в res/values/arrays.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="somearrayname">
        <item>@string/string1</item>
        <item>@string/string1</item>
    </string-array>
</resources>
person Jens    schedule 19.01.2012
comment
Привет, Йенс, спасибо, я бы сделал это сам, и imho это единственный способ, которым это должно быть сделано, и это то, на что я также пытался ссылаться, и я бы очень хотел, чтобы парсер дал мне строковые массивы, но это не так, поэтому я в основном застрял, ища другое решение, чем создавать массив вручную. - person StingRay5; 19.01.2012
comment
Ну, идея состоит в том, что вы помещаете свои массивы в другой XML-документ, используя ссылки в файле strings.xml, который вы создаете автоматически. Это должно работать для вас, если только вам по какой-то причине не нужно делать переменную string-arrays для каждого перевода? - person Jens; 20.01.2012