2016-12-21 2 views
0

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

У меня есть проект по AndroidStudio с несколькими общими файлами (и на нескольких языках), которые используются в различных приложениях:

|Common core 
|- default module 1 
|- default module 2 
|- default images 
|- | default strings 
    |- danish (default) in "values" folder 
    |- english in "values-en" folder 
    |- swedish in "values-sv" folder 
|App one 
|- specific module 3 
|- specific module 4 
|- specific images 
|- | specific strings 
    |- in "values" folder 
|App two 
... 

FYI, в моих программах, у меня есть AppApplication.java файл, который является первым файл с именем в e app и который используется для настройки моего приложения, например конфигурации меню, некоторых спецификаций переменных и настроек языков.

Теперь, когда я компилирую приложение 1 (например,), которое использует модуль по умолчанию из общего ядра, и я хочу изменить любую из строк или изображений из модуля по умолчанию, я просто помещаю их в конкретные images/strings с теми же именами, что и в общих папках изображений/строк по умолчанию, и они будут переопределены.

Это отлично работает. И я доволен этим. Но ... реальная проблема ...

Когда я хочу, чтобы настроить конфигурацию языков:


Ситуация # 1

_ "Я хочу использовать язык по умолчанию (на датском) в моем приложении 1 "_

Файл приложения AppApplication.java не вызывает никакой конкретной языковой конфигурации, и все в порядке. (Внутри общих файлов ядра я установил локальный «DK» по умолчанию.) Мое приложение имеет датский язык со всеми строками из строк по умолчанию в папке «values».

Если я хочу изменить некоторые конкретные строки в своем приложении, я помещаю их в свою папку «values» в конкретных приложениях, и они переопределяют строки по умолчанию. !! Отлично !!


Ситуация # 2

_ "Я хочу использовать шведский язык в моем приложении 1" _

Мой AppApplication.java файл содержит следующие строки:

LocaleAnswer[] localeAnswers = new LocaleAnswer[]{new LocaleAnswer(new Locale("sv", "SE"), "Swedish")}; 
    public LocaleAnswer[] getLocaleChoices(){ 
     return localeAnswers; 
    } 

(Я могу без проблем добавить несколько языков внутри своего Loc aleAnswers array. После этого основное ядро ​​позаботится об этом, показывая диалог с вопросом, какой язык вы хотите использовать при запуске)

Если моему приложению не нужно изменять какие-либо строки по умолчанию, то у меня нет любой конкретный файл строк, о котором нужно беспокоиться, и мы в порядке. Приложение хорошо компилируется, и приложение работает на шведском языке. ТЕБЯ! Отлично !!

НО, если мне нужно изменить строку, то, что я думал, это положить эту строку в папку «values».Но нет :(:(:(:( Строки не переопределяется

Я думаю, я знаю, почему:. Проект собирает все, а затем, когда я запускаю мое приложение, последний звонок о языках в моем AppApplication .java, и он говорит, что использует шведский файл. Таким образом, он использует шведский файл по умолчанию из папки «values-sv».

Давайте попробуем обойти это, переименовав мои значения «папка внутри моего приложения в« values-sv », так что, когда приложение будет вызывать файл шведских строк, оно будет использовать мои конкретные строки приложения и использует значения по умолчанию для тех, которые я не изменил. HAHAHAHAH вы знаете, что ?? «Я просто создаю приложение« автозагрузки »: D. Приложение компилируется, но когда оно пытается установить, телефон перезагружается, перезагружается, перезагружается и перезагружается снова и снова. Я должен был запустить телефон в SafeMode (том вниз + меню) во время одной из перезагрузок, чтобы иметь возможность стереть мое установленное приложение, а затем перезагрузить телефон в обычном режиме. Huuu:/Это не очень помогает.

Давайте попробуем обойти это путем дублирования моей папки «values-sv» внутри моего приложения и переименования одного из них в «значения». Итак, теперь у меня есть папка «values» и «values-sv» в моем приложении, и оба они содержат один и тот же файл строк (со специальными строковыми строками, которые я хочу изменить из стандартных). И ТАДААААМММ !! Работает !!

Coooooool, НО, КАК? ЗАЧЕМ ?


Вопросы

  1. Я не хочу, чтобы это повторяющиеся строки файла на двух разных папках, чтобы были мои строки изменены! Как я могу изменить свои строки по умолчанию конкретными, когда я выбираю конкретный язык, отличный от стандартного, только с одним файлом строк в моем приложении?
  2. Это не очень важный вопрос для проекта, но может быть очень интересно узнать, почему, когда вы добавляете только строку с определенным именем языка, например «values-sv» в моем приложении, он делает весь телефон перезагружать ? Я бы сказал, что приложение ищет значения по умолчанию, которые означают папку «values», а поскольку их нет, BOUM, ошибка! Но почему приложение не просто падает? Почему весь телефон перезагружается?

Заранее спасибо;) C.

ответ

0

Ответы
  1. В самом деле, в моих строк файлов, указываю "content_provider_authority" и "auth_account_type" для провайдера контента.

    Если вы дублируете эти два набора строк в другой папке «values-xx», чем по умолчанию «значения», телефон аварийно завершает работу и перезагружается на неопределенный срок.

    Итак, теперь у меня есть папка «values» с файлом strings.xml, который содержит только «content_provider_authority» и «auth_account_type». В моей папке «values-sv» у меня есть еще один файл strings.xml, который содержит все конкретные строки, которые я хочу изменить из папки «values-sv» по умолчанию, если они есть. : D

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

  2. Почему телефон перезагружается при конфликте поставщика контента? Почему приложение не просто сбой? Без понятия !!!


Я также необходимо установить APPNAME строку в папке «ценности» и не в «ценности Зв», как это не переводимые строки. Если вы этого не сделаете, приложение не будет разбиваться, но ваше имя приложения будет вашим именем пакета;)

C.

Смежные вопросы