Где найти "ресурс", откуда система берет языки?

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

Надпись "Разрешить" (в "ru" версии системы) будет называть "Allow permission" (в "en"), поэтому воспользоваться переводчиком не вариант (т.к. будет просто "Allow"). Так же, текст на эмуляторе от Android Studio различается с физическим устройством несмотря на то что версии систем и устройства подобраны одинаково.

Где я могу найти решение данной проблемы ? Спасибо.


Ответы (2 шт):

Автор решения: Andrew

Вот здесь показано красиво как получить языки (имеется в виду код языка который сейчас в системе стоит):

Locale.getDefault().getLanguage()       ---> en      
Locale.getDefault().getISO3Language()   ---> eng 
Locale.getDefault().getCountry()        ---> US 
Locale.getDefault().getISO3Country()    ---> USA 
Locale.getDefault().getDisplayCountry() ---> United States 
Locale.getDefault().getDisplayName()    ---> English (United States) 
Locale.getDefault().toString()          ---> en_US
Locale.getDefault().getDisplayLanguage()---> English
Locale.getDefault().toLanguageTag()     ---> en-US

Вообще логика такая - вы создаете базовый strings.xml например английский:

<?xml version="1.0" encoding="utf-8"?>                       <resources>
    <string name="hello_world">Hello world!</string>
    <string name="hello_name">Hello %s!</string>          
</resources>

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

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="hello_world">Привет мир!</string>
   <string name="hello_name">Привет%s!</string>
</resources>

и дальше система сама решает какой файл взять. Например у вас в системе стоит английский язык, тогда система будет брать английский strings.xml. То какой файл выберет ось, не зависит от модели устройства, а только от языка который вы используете. Ресурса с переводами системы нет, все делается вручную. Вот есть документация по вопросу локализации приложения. Так же вот туториал, где прекрасно расписан принцип локализации вашего приложения. Вот как добавить новую локаль:

введите сюда описание изображения

Туторил на русском с инструкцией по добавлению нового языка.

UPDATE

Нашел вот такой интересный вопрос на просторах интернета. В нем указывается что сама система может вам выдать разные стринги. Вот так же есть такой issue. И вот тут вроде как есть все строки которые присутствуют в системе. Вот тут тоже много системных строк.

→ Ссылка
Автор решения: ウラジスラフ ルバンウラジスラフ ルバン

Спасибо тем кто искал, последний ответ был почти то что мне нужно, но все же не то.

По счастливой случайности я читал статью на хабре про скрытый API в Android и автор статьи указал ссылку на сайт где можно найти больше скрытых методов. К моему счастью на том же сайте находилось то что мне нужно.

Вот "ресурсы", которые я искал. На этом сайте много полезного так что надеюсь кому-то это поможет.

→ Ссылка