Различные языки в Android без файлов ресурсов - PullRequest
0 голосов
/ 01 мая 2020

У меня вопрос по поводу нескольких языков для Android приложений. Я знаю, что это обычная практика - использовать файлы ресурсов для ваших строк (Android Studio всегда напоминает вам об этом, если вы забыли). Однако мне интересно, как это сделать для следующих двух элементов:

  1. Изображения, имеющие различное содержание языка
  2. Строковые переменные в классе, которые явно не определены в XML файл макета

Как бы вы справились с этими проблемами? Буду признателен за каждый комментарий.

Обновление: вот пример строковой переменной, которую я использую в коде (но не в файле XML -Layout). Это строка «Комментарий» в диалоге AlertDialog:

  AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("Comment");

        // Set up the input
            final EditText input = new EditText(this);
        // Specify the type of input expected; this, for example, sets the input as a password, and will mask the text
            input.setInputType( InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_NORMAL);
            input.setSingleLine(false);
            input.setLines(3);
            input.setText(comment_Text);
            builder.setView(input);


        // Set up the buttons
            builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    comment_Text = input.getText().toString();
                }
            });
            builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });

            builder.show();

1 Ответ

2 голосов
/ 01 мая 2020

Вы также можете локализовать свои рисованные объекты.

Вы можете сделать это, создав папку для указанного c языка, так же, как вы бы локализовали строковые ресурсы.

Пример отрисовки для локали по умолчанию:

res/drawable-hdpi/country_flag.png

Пример отрисовки для другой локали (es_ES)

res/drawable-es-rES-hdpi/country_flag.png

Для получения дополнительной информации, пожалуйста, ознакомьтесь с официальной документацией: https://developer.android.com/training/basics/supporting-devices/languages

По второму вопросу; ваши классы также должны использовать строковые ресурсы, не используйте жестко закодированные строки.

Пример того, как это сделать:

В этом случае файл строковых ресурсов будет содержать:

<string name="title_comment">Comment</string>
<string name="button_ok">OK</string>
<string name="button_cancel">Cancel</string>

Код для вашего AlertDialog будет выглядеть следующим образом:

 AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle(R.string.title_comment);

            final EditText input = new EditText(this);

            input.setInputType( InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_NORMAL);
            input.setSingleLine(false);
            input.setLines(3);
            input.setText(comment_Text);
            builder.setView(input);

            builder.setPositiveButton(R.string.button_ok, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    comment_Text = input.getText().toString();
                }
            });

            builder.setNegativeButton(R.string.button_cancel, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });

            builder.show();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...