1
0
Fork 0

improved error handling in the popup dialogs

This commit is contained in:
sspanak 2024-03-27 12:07:27 +02:00 committed by Dimo Karaivanov
parent b323794bf7
commit 32ac37b0fb
18 changed files with 90 additions and 41 deletions

View file

@ -15,8 +15,8 @@ import io.github.sspanak.tt9.db.DictionaryLoader;
import io.github.sspanak.tt9.db.WordStoreAsync; import io.github.sspanak.tt9.db.WordStoreAsync;
import io.github.sspanak.tt9.ime.modes.ModePassthrough; import io.github.sspanak.tt9.ime.modes.ModePassthrough;
import io.github.sspanak.tt9.preferences.SettingsStore; import io.github.sspanak.tt9.preferences.SettingsStore;
import io.github.sspanak.tt9.ui.PopupDialogActivity;
import io.github.sspanak.tt9.ui.UI; import io.github.sspanak.tt9.ui.UI;
import io.github.sspanak.tt9.ui.dialogs.PopupDialog;
import io.github.sspanak.tt9.ui.main.MainView; import io.github.sspanak.tt9.ui.main.MainView;
import io.github.sspanak.tt9.ui.tray.StatusBar; import io.github.sspanak.tt9.ui.tray.StatusBar;
import io.github.sspanak.tt9.util.Logger; import io.github.sspanak.tt9.util.Logger;
@ -32,7 +32,7 @@ public class TraditionalT9 extends HotkeyHandler {
public int onStartCommand(Intent intent, int flags, int startId) { public int onStartCommand(Intent intent, int flags, int startId) {
int result = super.onStartCommand(intent, flags, startId); int result = super.onStartCommand(intent, flags, startId);
String message = intent != null ? intent.getStringExtra(PopupDialogActivity.DIALOG_CLOSED_INTENT) : null; String message = intent != null ? intent.getStringExtra(PopupDialog.INTENT_CLOSE) : null;
if (message != null) { if (message != null) {
forceShowWindowIfHidden(); forceShowWindowIfHidden();
if (!message.isEmpty()) { if (!message.isEmpty()) {

View file

@ -5,17 +5,14 @@ import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import io.github.sspanak.tt9.util.Logger;
import io.github.sspanak.tt9.ime.TraditionalT9; import io.github.sspanak.tt9.ime.TraditionalT9;
import io.github.sspanak.tt9.ui.dialogs.AddWordDialog; import io.github.sspanak.tt9.ui.dialogs.AddWordDialog;
import io.github.sspanak.tt9.ui.dialogs.ConfirmDictionaryUpdateDialog; import io.github.sspanak.tt9.ui.dialogs.ConfirmDictionaryUpdateDialog;
import io.github.sspanak.tt9.ui.dialogs.PopupDialog; import io.github.sspanak.tt9.ui.dialogs.PopupDialog;
import io.github.sspanak.tt9.util.Logger;
public class PopupDialogActivity extends AppCompatActivity { public class PopupDialogActivity extends AppCompatActivity {
private static final String LOG_TAG = PopupDialogActivity.class.getSimpleName(); private static final String LOG_TAG = PopupDialogActivity.class.getSimpleName();
public static final String DIALOG_ADD_WORD_INTENT = "tt9.popup_dialog.add_word";
public static final String DIALOG_CONFIRM_WORDS_UPDATE_INTENT = "tt9.popup_dialog.confirm_words_update";
public static final String DIALOG_CLOSED_INTENT = "tt9.popup_dialog.closed";
@Override @Override
@ -33,13 +30,13 @@ public class PopupDialogActivity extends AppCompatActivity {
private PopupDialog getDialog() { private PopupDialog getDialog() {
Intent i = getIntent(); Intent i = getIntent();
String popupType = i != null ? i.getStringExtra("popup_type") : ""; String popupType = i != null ? i.getStringExtra(PopupDialog.PARAMETER_DIALOG_TYPE) : "";
popupType = popupType != null ? popupType : ""; popupType = popupType != null ? popupType : "";
switch (popupType) { switch (popupType) {
case DIALOG_ADD_WORD_INTENT: case AddWordDialog.TYPE:
return new AddWordDialog(this, i, this::onDialogClose); return new AddWordDialog(this, i, this::onDialogClose);
case DIALOG_CONFIRM_WORDS_UPDATE_INTENT: case ConfirmDictionaryUpdateDialog.TYPE:
return new ConfirmDictionaryUpdateDialog(this, i, this::onDialogClose); return new ConfirmDictionaryUpdateDialog(this, i, this::onDialogClose);
default: default:
Logger.w(LOG_TAG, "Unknown popup type: '" + popupType + "'. Not displaying anything."); Logger.w(LOG_TAG, "Unknown popup type: '" + popupType + "'. Not displaying anything.");
@ -54,7 +51,7 @@ public class PopupDialogActivity extends AppCompatActivity {
private void sendMessageToMain(String message) { private void sendMessageToMain(String message) {
Intent intent = new Intent(this, TraditionalT9.class); Intent intent = new Intent(this, TraditionalT9.class);
intent.putExtra(DIALOG_CLOSED_INTENT, message); intent.putExtra(PopupDialog.INTENT_CLOSE, message);
startService(intent); startService(intent);
} }
} }

View file

@ -12,6 +12,8 @@ import androidx.annotation.NonNull;
import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.Language;
import io.github.sspanak.tt9.preferences.PreferencesActivity; import io.github.sspanak.tt9.preferences.PreferencesActivity;
import io.github.sspanak.tt9.ui.dialogs.AddWordDialog;
import io.github.sspanak.tt9.ui.dialogs.ConfirmDictionaryUpdateDialog;
public class UI { public class UI {
private static Toast toastLang = null; private static Toast toastLang = null;
@ -20,9 +22,9 @@ public class UI {
Intent intent = new Intent(ims, PopupDialogActivity.class); Intent intent = new Intent(ims, PopupDialogActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.putExtra("word", currentWord); intent.putExtra(AddWordDialog.PARAMETER_DIALOG_TYPE, AddWordDialog.TYPE);
intent.putExtra("lang", language); intent.putExtra(AddWordDialog.PARAMETER_LANGUAGE, language);
intent.putExtra("popup_type", PopupDialogActivity.DIALOG_ADD_WORD_INTENT); intent.putExtra(AddWordDialog.PARAMETER_WORD, currentWord);
ims.startActivity(intent); ims.startActivity(intent);
} }
@ -31,8 +33,8 @@ public class UI {
Intent intent = new Intent(ims, PopupDialogActivity.class); Intent intent = new Intent(ims, PopupDialogActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.putExtra("lang", language); intent.putExtra(ConfirmDictionaryUpdateDialog.PARAMETER_DIALOG_TYPE, ConfirmDictionaryUpdateDialog.TYPE);
intent.putExtra("popup_type", PopupDialogActivity.DIALOG_CONFIRM_WORDS_UPDATE_INTENT); intent.putExtra(ConfirmDictionaryUpdateDialog.PARAMETER_LANGUAGE, language);
ims.startActivity(intent); ims.startActivity(intent);
} }

View file

@ -5,11 +5,11 @@ import android.content.Intent;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import io.github.sspanak.tt9.util.ConsumerCompat;
import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.R;
import io.github.sspanak.tt9.db.WordStoreAsync; import io.github.sspanak.tt9.db.WordStoreAsync;
import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.Language;
import io.github.sspanak.tt9.languages.LanguageCollection; import io.github.sspanak.tt9.languages.LanguageCollection;
import io.github.sspanak.tt9.util.ConsumerCompat;
public class AddWordDialog extends PopupDialog { public class AddWordDialog extends PopupDialog {
public static final int CODE_SUCCESS = 0; public static final int CODE_SUCCESS = 0;
@ -18,6 +18,10 @@ public class AddWordDialog extends PopupDialog {
public static final int CODE_WORD_EXISTS = 3; public static final int CODE_WORD_EXISTS = 3;
public static final int CODE_GENERAL_ERROR = 666; public static final int CODE_GENERAL_ERROR = 666;
public static final String TYPE = "tt9.popup_dialog.add_word";
public static final String PARAMETER_LANGUAGE = "lang";
public static final String PARAMETER_WORD = "word";
private Language language; private Language language;
private String word; private String word;
@ -27,30 +31,32 @@ public class AddWordDialog extends PopupDialog {
title = context.getResources().getString(R.string.add_word_title); title = context.getResources().getString(R.string.add_word_title);
OKLabel = context.getResources().getString(R.string.add_word_add); OKLabel = context.getResources().getString(R.string.add_word_add);
parseIntent(context, intent);
}
protected void parseIntent(@NonNull Context context, @NonNull Intent intent) {
word = intent.getStringExtra(PARAMETER_WORD);
int languageId = intent.getIntExtra(PARAMETER_LANGUAGE, -1);
language = LanguageCollection.getLanguage(context, languageId);
if (language == null) { if (language == null) {
message = context.getString(R.string.add_word_invalid_language); message = context.getString(R.string.add_word_invalid_language_x, languageId);
} else { } else {
message = context.getString(R.string.add_word_confirm, word, language.getName()); message = context.getString(R.string.add_word_confirm, word, language.getName());
} }
} }
protected void parseIntent(Context context, Intent intent) {
word = intent.getStringExtra("word");
language = LanguageCollection.getLanguage(context, intent.getIntExtra("lang", -1));
}
private void onOK() {
public void render() { if (language != null) {
if (message == null || word == null || word.isEmpty()) { WordStoreAsync.put(this::onAddingFinished, language, word);
if (activityFinisher != null) activityFinisher.accept("");
return;
} }
Runnable OKAction = language == null ? null : () -> WordStoreAsync.put(this::onAddedWord, language, word);
super.render(OKAction);
} }
private void onAddedWord(int statusCode) {
private void onAddingFinished(int statusCode) {
String response; String response;
switch (statusCode) { switch (statusCode) {
case CODE_SUCCESS: case CODE_SUCCESS:
@ -76,4 +82,14 @@ public class AddWordDialog extends PopupDialog {
activityFinisher.accept(response); activityFinisher.accept(response);
} }
public void render() {
if (message == null || word == null || word.isEmpty()) {
close();
return;
}
super.render(this::onOK);
}
} }

View file

@ -5,34 +5,48 @@ import android.content.Intent;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import io.github.sspanak.tt9.util.ConsumerCompat;
import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.R;
import io.github.sspanak.tt9.db.DictionaryLoader; import io.github.sspanak.tt9.db.DictionaryLoader;
import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.Language;
import io.github.sspanak.tt9.languages.LanguageCollection; import io.github.sspanak.tt9.languages.LanguageCollection;
import io.github.sspanak.tt9.util.ConsumerCompat;
import io.github.sspanak.tt9.util.Logger;
public class ConfirmDictionaryUpdateDialog extends PopupDialog { public class ConfirmDictionaryUpdateDialog extends PopupDialog {
public static final String TYPE = "tt9.popup_dialog.confirm_words_update";
public static final String PARAMETER_LANGUAGE = "lang";
private Language language; private Language language;
public ConfirmDictionaryUpdateDialog(@NonNull Context context, @NonNull Intent intent, ConsumerCompat<String> activityFinisher) { public ConfirmDictionaryUpdateDialog(@NonNull Context context, @NonNull Intent intent, ConsumerCompat<String> activityFinisher) {
super(context, intent, activityFinisher); super(context, intent, activityFinisher);
title = context.getString(R.string.app_name); title = context.getString(R.string.app_name);
OKLabel = context.getString(R.string.dictionary_update_update); OKLabel = context.getString(R.string.dictionary_update_update);
String langName = language != null ? language.getName() : ""; parseIntent(context, intent);
message = context.getResources().getString(R.string.dictionary_update_message, langName);
} }
protected void parseIntent(Context context, Intent intent) { protected void parseIntent(@NonNull Context context, @NonNull Intent intent) {
language = LanguageCollection.getLanguage(context, intent.getIntExtra("lang", -1)); int languageId = intent.getIntExtra(PARAMETER_LANGUAGE, -1);
language = LanguageCollection.getLanguage(context, languageId);
if (language == null) {
Logger.e(getClass().getSimpleName(), "Failed auto-updating the dictionary for language: '" + languageId + "'");
} else {
message = context.getResources().getString(R.string.dictionary_update_message, language.getName());
}
} }
@Override @Override
public void render() { public void render() {
super.render(this::loadDictionary); if (language == null) {
close();
} else {
super.render(this::loadDictionary);
}
} }
private void loadDictionary() { private void loadDictionary() {
DictionaryLoader.load(context, language); DictionaryLoader.load(context, language);
activityFinisher.accept(""); close();
} }
} }

View file

@ -5,10 +5,14 @@ import android.content.Intent;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import io.github.sspanak.tt9.util.ConsumerCompat;
import io.github.sspanak.tt9.ui.UI; import io.github.sspanak.tt9.ui.UI;
import io.github.sspanak.tt9.util.ConsumerCompat;
abstract public class PopupDialog { abstract public class PopupDialog {
public static final String INTENT_CLOSE = "tt9.popup_dialog.close";
public static final String PARAMETER_DIALOG_TYPE = "popup_type";
protected final Context context; protected final Context context;
protected final ConsumerCompat<String> activityFinisher; protected final ConsumerCompat<String> activityFinisher;
protected String title; protected String title;
@ -18,13 +22,17 @@ abstract public class PopupDialog {
public PopupDialog(@NonNull Context context, @NonNull Intent intent, ConsumerCompat<String> activityFinisher) { public PopupDialog(@NonNull Context context, @NonNull Intent intent, ConsumerCompat<String> activityFinisher) {
this.activityFinisher = activityFinisher; this.activityFinisher = activityFinisher;
this.context = context; this.context = context;
parseIntent(context, intent);
} }
abstract protected void parseIntent(Context context, Intent intent); protected void close() {
abstract public void render(); if (activityFinisher != null) {
activityFinisher.accept("");
}
}
protected void render(Runnable OKAction) { protected void render(Runnable OKAction) {
UI.confirm(context, title, message, OKLabel, OKAction, () -> activityFinisher.accept("")); UI.confirm(context, title, message, OKLabel, OKAction, () -> activityFinisher.accept(""));
} }
abstract public void render();
} }

View file

@ -9,6 +9,7 @@
<string name="add_word_no_selection">Преместете показалеца върху дума, за да я добавите към речника.</string> <string name="add_word_no_selection">Преместете показалеца върху дума, за да я добавите към речника.</string>
<string name="add_word_blank">Не може да се въведе празна дума.</string> <string name="add_word_blank">Не може да се въведе празна дума.</string>
<string name="add_word_exist">Думата „%1$s“ вече съществува в речника.</string> <string name="add_word_exist">Думата „%1$s“ вече съществува в речника.</string>
<string name="add_word_invalid_language_x">Не може да се добави дума. Неразпознат език: \"%1$d\".</string>
<string name="add_word_success">„%1$s“ е добавена.</string> <string name="add_word_success">„%1$s“ е добавена.</string>
<string name="add_word_title">Добавяне на дума</string> <string name="add_word_title">Добавяне на дума</string>
<string name="pref_category_about">За приложението</string> <string name="pref_category_about">За приложението</string>

View file

@ -10,6 +10,7 @@
<string name="add_word_no_selection">Bewegen Sie den Cursor innerhalb eines Wortes, um es hinzuzufügen.</string> <string name="add_word_no_selection">Bewegen Sie den Cursor innerhalb eines Wortes, um es hinzuzufügen.</string>
<string name="add_word_blank">Leeres Wort nicht hinzugefügt.</string> <string name="add_word_blank">Leeres Wort nicht hinzugefügt.</string>
<string name="add_word_exist">Das Wort \"%1$s\" ist bereits in Wörterbuch.</string> <string name="add_word_exist">Das Wort \"%1$s\" ist bereits in Wörterbuch.</string>
<string name="add_word_invalid_language_x">Wort kann nicht hinzugefügt werden. Unbekannte Sprache: \"%1$d\".</string>
<string name="add_word_success">\"%1$s\" hinzugefügt.</string> <string name="add_word_success">\"%1$s\" hinzugefügt.</string>
<string name="add_word_title">Wort hinzufügen</string> <string name="add_word_title">Wort hinzufügen</string>

View file

@ -11,6 +11,7 @@
<string name="no_language">Sin idioma</string> <string name="no_language">Sin idioma</string>
<string name="error_unexpected">Ocurrió un error inesperado.</string> <string name="error_unexpected">Ocurrió un error inesperado.</string>
<string name="add_word_exist">La palabra \"%1$s\" ya esta en el diccionario.</string> <string name="add_word_exist">La palabra \"%1$s\" ya esta en el diccionario.</string>
<string name="add_word_invalid_language_x">No se puede agregar una palabra. Idioma desconocido: \"%1$d\".</string>
<string name="add_word_success">\"%1$s\" añadida.</string> <string name="add_word_success">\"%1$s\" añadida.</string>
<string name="add_word_title">Agregar palabra</string> <string name="add_word_title">Agregar palabra</string>
<string name="pref_category_abc_mode">Modo ABC</string> <string name="pref_category_abc_mode">Modo ABC</string>

View file

@ -9,6 +9,7 @@
<string name="add_word_no_selection">Déplacez le curseur dans un mot pour l\'ajouter.</string> <string name="add_word_no_selection">Déplacez le curseur dans un mot pour l\'ajouter.</string>
<string name="add_word_blank">Mot vide non ajouté.</string> <string name="add_word_blank">Mot vide non ajouté.</string>
<string name="add_word_exist">Le mot «%1$s» est déjà dans le dictionnaire.</string> <string name="add_word_exist">Le mot «%1$s» est déjà dans le dictionnaire.</string>
<string name="add_word_invalid_language_x">Impossible d\'ajouter un mot. Langue inconnue : « %1$d ».</string>
<string name="add_word_success">« %1$s » est ajouté</string> <string name="add_word_success">« %1$s » est ajouté</string>
<string name="add_word_title">Ajouter un mot</string> <string name="add_word_title">Ajouter un mot</string>
<string name="pref_category_about">À propos de l\'application</string> <string name="pref_category_about">À propos de l\'application</string>

View file

@ -11,6 +11,7 @@
<string name="add_word_no_selection">Sposta il cursore dentro un parola per aggiungerla.</string> <string name="add_word_no_selection">Sposta il cursore dentro un parola per aggiungerla.</string>
<string name="add_word_blank">Nessuna parola da aggiungere.</string> <string name="add_word_blank">Nessuna parola da aggiungere.</string>
<string name="add_word_exist">Parola “%1$s” già nel dizionario.</string> <string name="add_word_exist">Parola “%1$s” già nel dizionario.</string>
<string name="add_word_invalid_language_x">Impossibile aggiungere una parola. Lingua sconosciuta: \"%1$d\".</string>
<string name="add_word_success">\"%1$s\" aggiunta.</string> <string name="add_word_success">\"%1$s\" aggiunta.</string>
<string name="add_word_title">Aggiungi parola</string> <string name="add_word_title">Aggiungi parola</string>

View file

@ -11,6 +11,7 @@
<string name="add_word_no_selection">הזיזו את הסמן בתוך מילה כדי להוסיף אותה.</string> <string name="add_word_no_selection">הזיזו את הסמן בתוך מילה כדי להוסיף אותה.</string>
<string name="add_word_blank">מילה ריקה לא נוספה</string> <string name="add_word_blank">מילה ריקה לא נוספה</string>
<string name="add_word_exist">המילה \"%1$s\" כבר קיימת במילון.</string> <string name="add_word_exist">המילה \"%1$s\" כבר קיימת במילון.</string>
<string name="add_word_invalid_language_x">לא ניתן להוסיף מילה. שפה לא ידועה: \"%1$d\".</string>
<string name="add_word_success">%1$s נוסף.</string> <string name="add_word_success">%1$s נוסף.</string>
<string name="add_word_title">הוסף מילה</string> <string name="add_word_title">הוסף מילה</string>

View file

@ -13,6 +13,7 @@
<string name="add_word_no_selection">Perkelkite žymeklį prie žodžio kurį norite pridėti.</string> <string name="add_word_no_selection">Perkelkite žymeklį prie žodžio kurį norite pridėti.</string>
<string name="add_word_blank">Negalima pridėti tuščio žodžio.</string> <string name="add_word_blank">Negalima pridėti tuščio žodžio.</string>
<string name="add_word_exist">Žodis \"%1$s\" jau yra žodyne.</string> <string name="add_word_exist">Žodis \"%1$s\" jau yra žodyne.</string>
<string name="add_word_invalid_language_x">Negalima pridėti žodžio. Nežinoma kalba: \"%1$d\".</string>
<string name="add_word_success">Žodis \"%1$s\" pridėtas.</string> <string name="add_word_success">Žodis \"%1$s\" pridėtas.</string>
<string name="add_word_title">Pridėti žodį</string> <string name="add_word_title">Pridėti žodį</string>

View file

@ -10,6 +10,7 @@
<string name="add_word_no_selection">Verplaats de cursor binnen een woord om het toe te voegen.</string> <string name="add_word_no_selection">Verplaats de cursor binnen een woord om het toe te voegen.</string>
<string name="add_word_blank">Leeg woord niet toegevoegd.</string> <string name="add_word_blank">Leeg woord niet toegevoegd.</string>
<string name="add_word_exist">Woord \"%1$s\" staat al in het woordenboek.</string> <string name="add_word_exist">Woord \"%1$s\" staat al in het woordenboek.</string>
<string name="add_word_invalid_language_x">Kan geen woord toevoegen. Onbekende taal: \"%1$d\".</string>
<string name="add_word_success">\"%1$s\" toegevoegd.</string> <string name="add_word_success">\"%1$s\" toegevoegd.</string>
<string name="add_word_title">Woord toevoegen</string> <string name="add_word_title">Woord toevoegen</string>
<string name="pref_category_about">Over de applicatie</string> <string name="pref_category_about">Over de applicatie</string>

View file

@ -11,6 +11,7 @@
<string name="add_word_no_selection">Mova o cursor dentro de uma palavra para adicioná-la.</string> <string name="add_word_no_selection">Mova o cursor dentro de uma palavra para adicioná-la.</string>
<string name="add_word_blank">Palavra em branco, impossível adicionar.</string> <string name="add_word_blank">Palavra em branco, impossível adicionar.</string>
<string name="add_word_exist">Palavra \"%1$s\" já está registrada.</string> <string name="add_word_exist">Palavra \"%1$s\" já está registrada.</string>
<string name="add_word_invalid_language_x">Não é possível adicionar uma palavra. Idioma desconhecido: \"%1$d\".</string>
<string name="add_word_success">\"%1$s\" adicionada.</string> <string name="add_word_success">\"%1$s\" adicionada.</string>
<string name="add_word_title">Adicionar Palavra</string> <string name="add_word_title">Adicionar Palavra</string>

View file

@ -9,6 +9,7 @@
<string name="add_word_no_selection">Переместите курсор внутрь слова, чтобы добавить его.</string> <string name="add_word_no_selection">Переместите курсор внутрь слова, чтобы добавить его.</string>
<string name="add_word_blank">Невозможно добавить слово.</string> <string name="add_word_blank">Невозможно добавить слово.</string>
<string name="add_word_exist">Слово «%1$s» уже есть в словаре.</string> <string name="add_word_exist">Слово «%1$s» уже есть в словаре.</string>
<string name="add_word_invalid_language_x">Невозможно добавить слово. Неизвестный язык: \"%1$d\".</string>
<string name="add_word_success">« %1$s » добавлено</string> <string name="add_word_success">« %1$s » добавлено</string>
<string name="add_word_title">Добавить слово</string> <string name="add_word_title">Добавить слово</string>
<string name="pref_category_about">О приложении</string> <string name="pref_category_about">О приложении</string>

View file

@ -13,6 +13,7 @@
<string name="add_word_no_selection">Перемістіть курсор у слово, щоб додати його.</string> <string name="add_word_no_selection">Перемістіть курсор у слово, щоб додати його.</string>
<string name="add_word_blank">Пусте слово не додано.</string> <string name="add_word_blank">Пусте слово не додано.</string>
<string name="add_word_exist">Слово \"%1$s\" вже існує у словнику.</string> <string name="add_word_exist">Слово \"%1$s\" вже існує у словнику.</string>
<string name="add_word_invalid_language_x">Не вдається додати слово. Невідома мова: \"%1$d\".</string>
<string name="add_word_success">\"%1$s\" додано.</string> <string name="add_word_success">\"%1$s\" додано.</string>
<string name="add_word_title">Додати слово</string> <string name="add_word_title">Додати слово</string>

View file

@ -17,6 +17,7 @@
<string name="add_word_blank">Blank word not added.</string> <string name="add_word_blank">Blank word not added.</string>
<string name="add_word_exist">Word \"%1$s\" is already in the dictionary.</string> <string name="add_word_exist">Word \"%1$s\" is already in the dictionary.</string>
<string name="add_word_invalid_language" translatable="false">Cannot add a word when no language is selected.</string> <string name="add_word_invalid_language" translatable="false">Cannot add a word when no language is selected.</string>
<string name="add_word_invalid_language_x">Cannot add a word. Unknown language: \"%1$d\".</string>
<string name="add_word_success">\"%1$s\" added.</string> <string name="add_word_success">\"%1$s\" added.</string>
<string name="add_word_title">Add Word</string> <string name="add_word_title">Add Word</string>