Как исправить появление сообщения setError на разных языках? - PullRequest
0 голосов
/ 15 октября 2019

Я создал страницу входа, и эта страница поддерживает 2 разных языка (английский и французский) .

Страница отлично работает, когда я перевожу с языка на язык.

Но проблема в том, что когда я переключаюсь на французский язык сообщение setError больше не появляется для проверки полей.

Этот код загрузит страницу на основе языкавыделение:

 public boolean onOptionsItemSelected(MenuItem item) {

            switch (item.getItemId()) {

                case R.id.eng:
                String languageToLoad = "en";
                Locale locale = new Locale(languageToLoad);
                Locale.setDefault(locale);
                Configuration config = new Configuration();
                config.locale = locale;
                getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
                this.setContentView(R.layout.activity_main);
                break;

                case R.id.fr:
                languageToLoad = "fr";
                locale = new Locale(languageToLoad);
                Locale.setDefault(locale);
                config = new Configuration();
                config.locale = locale;
                getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
                this.setContentView(R.layout.activity_main);
                break;

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

А вот проверка поля имени пользователя и сообщение setError :

private boolean validateUsername(){

        String username = usernameEditText.getText().toString().trim();

        if(username.isEmpty()){

            usernameEditText.setError("Field can't be empty");
            return false;

        } else if(username.length() > 15){

            usernameEditText.setError("Username too long");
            return false;

        } else {
            usernameEditText.setError(null);
            return true;
        }
    }

Код XML:

      <?xml version="1.0" encoding="utf-8"?>
<android.widget.RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/usernameEditText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="300dp"
        android:ems="10"
        android:hint="@string/YourUsername"
        android:inputType="textPersonName"
        android:maxLength="15"
        app:errorEnabled="true" />

    <Button
        android:id="@+id/signupButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/test3"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="20dp"
        android:onClick="signupLogin"
        android:hint="@string/login" />
</android.widget.RelativeLayout>

всплывающее сообщение между двумя языками:

English Language Msg French Language without popup

Здесь я устанавливаю сообщение об ошибке в Английский но как добавить сообщение setError для поддержки разных языков?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 15 октября 2019

Используйте что-то вроде:

<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/username"
    ..>

TextInputLayout username = findViewById(R.id.username);
username.setError(getResources().getString(R.string.xxxx));

Затем просто определите строку в res/values/strings.xml и res/values-fr/strings.xml

0 голосов
/ 15 октября 2019

Для этого вы можете локализовать ваше приложение. Перейдите по этой ссылке Локализуйте свое приложение

GoTo res -> значения -> Щелкните правой кнопкой мыши -> Новый -> Файл значения ресурса -> Выбрать локаль -> Добавить французский -> OK

Localize your app

string.xml

<string name="empty_error">Field can't be empty</string>
<string name="character_exceed_error">Username too long </string>

string.xml (fr)

<string name="empty_error">Le champ ne peut pas être vide</string>
<string name="character_exceed_error">Nom d'utilisateur trop long </string>

Теперь вам просто нужно получить строковое значение из ресурсов, как показано ниже

usernameEditText.setError(getString(R.string.empty_error);
0 голосов
/ 15 октября 2019

Использовать setError сообщение из ресурса String и использовать строку локализации для предпочитаемого языка с английским

...