08
Мар
2021

Как сделать чтобы пользователь мог менять локализацию внутри приложения? Почему у меня не срабатывает код?

Вот код, Toast message возникает, но язык надписей не меняется.

public class MainActivity extends AppCompatActivity {

    Locale locale1;
    Locale locale2;
    Configuration configuration1;
    Configuration configuration2;

    TextView hello;
    TextView eatMusli;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        hello = findViewById(R.id.hello);
        eatMusli = findViewById(R.id.eat_musli);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.main_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.ru:
                locale1 = new Locale("ru");
                Locale.setDefault(locale1);
                configuration1 = new Configuration();
                configuration1.locale = locale1;
                getBaseContext().getResources().updateConfiguration(configuration1,
                        getBaseContext().getResources().getDisplayMetrics());
                Toast.makeText(this, "Locale in Russia!", Toast.LENGTH_SHORT).show();

                return true;
            case R.id.en:
                locale2 = new Locale("en");
                Locale.setDefault(locale2);
                configuration2 = new Configuration();
                configuration2.locale = locale2;
                getBaseContext().getResources().updateConfiguration(configuration2,
                        getBaseContext().getResources().getDisplayMetrics());
                Toast.makeText(this, "Locale in England!", Toast.LENGTH_SHORT).show();

                return true;

            default:
                return super.onOptionsItemSelected(item);
        }
    }

Так выглядят строки: в ru/string.xml:

<resources>
    <string name="eat_musli">А давай жрать мюсли?</string>
    <string name="hello">Привет!</string>
    <string name="language">Язык</string>
    <string name="ru">Русский</string>
    <string name="en">Инглиш</string>
</resources>

в en/string.xml:

<resources>
    <string name="eat_musli">Let\'s eat musli?</string>
    <string name="hello">Hello!</string>
    <string name="language">language</string>
    <string name="en">english</string>
    <string name="ru">russian</string>
</resources>

Источник: https://ru.stackoverflow.com/questions/1253055/%D0%9A%D0%B0%D0%BA-%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C-%D1%87%D1%82%D0%BE%D0%B1%D1%8B-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C-%D0%BC%D0%BE%D0%B3-%D0%BC%D0%B5%D0%BD%D1%8F%D1%82%D1%8C-%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8E-%D0%B2%D0%BD%D1%83%D1%82%D1%80%D0%B8-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F-%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83

Тебе может это понравится...

Добавить комментарий