repaced the 'dictionary update available' popup with a notification
This commit is contained in:
parent
17f1681be5
commit
28a81740ff
25 changed files with 126 additions and 50 deletions
|
|
@ -24,8 +24,8 @@ import io.github.sspanak.tt9.languages.Language;
|
|||
import io.github.sspanak.tt9.languages.exceptions.InvalidLanguageCharactersException;
|
||||
import io.github.sspanak.tt9.languages.exceptions.InvalidLanguageException;
|
||||
import io.github.sspanak.tt9.preferences.settings.SettingsStore;
|
||||
import io.github.sspanak.tt9.ui.dialogs.ConfirmDictionaryUpdateDialog;
|
||||
import io.github.sspanak.tt9.ui.notifications.DictionaryLoadingBar;
|
||||
import io.github.sspanak.tt9.ui.notifications.DictionaryUpdateNotification;
|
||||
import io.github.sspanak.tt9.util.ConsumerCompat;
|
||||
import io.github.sspanak.tt9.util.Logger;
|
||||
import io.github.sspanak.tt9.util.Timer;
|
||||
|
|
@ -130,7 +130,7 @@ public class DictionaryLoader {
|
|||
}
|
||||
// or if the database is outdated, compared to the dictionary file, ask for confirmation and load
|
||||
else if (!hash.equals(new WordFile(language.getDictionaryFile(), self.assets).getHash())) {
|
||||
ConfirmDictionaryUpdateDialog.show(context, language.getId());
|
||||
new DictionaryUpdateNotification(context, language).show();
|
||||
}
|
||||
},
|
||||
language
|
||||
|
|
|
|||
|
|
@ -105,6 +105,8 @@ public class TraditionalT9 extends HotkeyHandler {
|
|||
initUi();
|
||||
}
|
||||
|
||||
DictionaryLoader.autoLoad(this, mLanguage);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ public class SettingsStore extends SettingsUI {
|
|||
|
||||
/************* internal settings *************/
|
||||
public final static int DELETE_WORDS_SEARCH_DELAY = 500; // ms
|
||||
public final static int DICTIONARY_AUTO_LOAD_COOLDOWN_TIME = 86400000; // 24 hours in ms
|
||||
public final static int DICTIONARY_AUTO_LOAD_COOLDOWN_TIME = 1200000; // 20 minutes in ms
|
||||
public final static int DICTIONARY_IMPORT_BATCH_SIZE = 5000; // words
|
||||
public final static int DICTIONARY_IMPORT_PROGRESS_UPDATE_TIME = 250; // ms
|
||||
public final static byte SLOW_QUERY_TIME = 50; // ms
|
||||
|
|
|
|||
|
|
@ -2,29 +2,24 @@ package io.github.sspanak.tt9.ui.dialogs;
|
|||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.inputmethodservice.InputMethodService;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import io.github.sspanak.tt9.R;
|
||||
import io.github.sspanak.tt9.db.DictionaryLoader;
|
||||
import io.github.sspanak.tt9.languages.Language;
|
||||
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 AutoUpdateMonologue extends PopupDialog {
|
||||
public static final String TYPE = "tt9.popup_dialog.confirm_words_update";
|
||||
public static final String PARAMETER_LANGUAGE = "lang";
|
||||
|
||||
private Language language;
|
||||
|
||||
|
||||
ConfirmDictionaryUpdateDialog(@NonNull Context context, @NonNull Intent intent, ConsumerCompat<String> activityFinisher) {
|
||||
AutoUpdateMonologue(@NonNull Context context, @NonNull Intent intent, ConsumerCompat<String> activityFinisher) {
|
||||
super(context, activityFinisher);
|
||||
|
||||
title = context.getString(R.string.app_name);
|
||||
OKLabel = context.getString(R.string.dictionary_update_update);
|
||||
parseIntent(context, intent);
|
||||
}
|
||||
|
||||
|
|
@ -34,35 +29,27 @@ public class ConfirmDictionaryUpdateDialog extends PopupDialog {
|
|||
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());
|
||||
Logger.e(getClass().getSimpleName(), "Auto-updating is not possible. Intent parameter '" + PARAMETER_LANGUAGE + "' is invalid: " + languageId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void loadDictionary() {
|
||||
DictionaryLoader.load(context, language);
|
||||
close();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
void render() {
|
||||
if (language == null) {
|
||||
close();
|
||||
} else {
|
||||
super.render(this::loadDictionary);
|
||||
if (language != null) {
|
||||
DictionaryLoader.load(context, language);
|
||||
}
|
||||
close();
|
||||
}
|
||||
|
||||
|
||||
public static void show(InputMethodService ims, int language) {
|
||||
Intent intent = new Intent(ims, PopupDialogActivity.class);
|
||||
public static Intent generateShowIntent(Context context, int language) {
|
||||
Intent intent = new Intent(context, PopupDialogActivity.class);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
|
||||
intent.putExtra(PARAMETER_DIALOG_TYPE, TYPE);
|
||||
intent.putExtra(PARAMETER_LANGUAGE, language);
|
||||
ims.startActivity(intent);
|
||||
|
||||
return intent;
|
||||
}
|
||||
}
|
||||
|
|
@ -33,8 +33,8 @@ public class PopupDialogActivity extends AppCompatActivity {
|
|||
switch (popupType) {
|
||||
case AddWordDialog.TYPE:
|
||||
return new AddWordDialog(this, i, this::onDialogClose);
|
||||
case ConfirmDictionaryUpdateDialog.TYPE:
|
||||
return new ConfirmDictionaryUpdateDialog(this, i, this::onDialogClose);
|
||||
case AutoUpdateMonologue.TYPE:
|
||||
return new AutoUpdateMonologue(this, i, this::onDialogClose);
|
||||
default:
|
||||
Logger.w(LOG_TAG, "Unknown popup type: '" + popupType + "'. Not displaying anything.");
|
||||
return null;
|
||||
|
|
|
|||
|
|
@ -8,8 +8,11 @@ import android.content.res.Resources;
|
|||
import android.os.Build;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.app.NotificationCompat;
|
||||
|
||||
import io.github.sspanak.tt9.languages.Language;
|
||||
|
||||
public abstract class DictionaryNotification {
|
||||
private static final int NOTIFICATION_ID = 1;
|
||||
private static final String NOTIFICATION_CHANNEL_ID = "dictionary-notifications";
|
||||
|
|
@ -24,20 +27,20 @@ public abstract class DictionaryNotification {
|
|||
protected String messageLong = "";
|
||||
|
||||
|
||||
protected DictionaryNotification(Context context) {
|
||||
protected DictionaryNotification(@NonNull Context context, @Nullable Language language) {
|
||||
resources = context.getResources();
|
||||
|
||||
manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
notificationBuilder = getNotificationBuilderCompat(context);
|
||||
|
||||
notificationBuilder
|
||||
.setContentIntent(createNavigationIntent(context))
|
||||
.setContentIntent(createNavigationIntent(context, language))
|
||||
.setSmallIcon(android.R.drawable.stat_notify_sync)
|
||||
.setCategory(NotificationCompat.CATEGORY_PROGRESS)
|
||||
.setOnlyAlertOnce(true);
|
||||
}
|
||||
|
||||
protected abstract PendingIntent createNavigationIntent(Context context);
|
||||
protected abstract PendingIntent createNavigationIntent(@NonNull Context context, @Nullable Language language);
|
||||
|
||||
private NotificationCompat.Builder getNotificationBuilderCompat(Context context) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
|
|
@ -54,16 +57,21 @@ public abstract class DictionaryNotification {
|
|||
}
|
||||
|
||||
|
||||
public void showMessage(@NonNull String title, @NonNull String message, @NonNull String messageLong) {
|
||||
public void show() {
|
||||
indeterminate = false;
|
||||
this.title = title;
|
||||
this.message = message;
|
||||
this.messageLong = messageLong;
|
||||
renderMessage();
|
||||
}
|
||||
|
||||
|
||||
public void showError(@NonNull String title, @NonNull String message) {
|
||||
public void showMessage(String title, String message, String messageLong) {
|
||||
this.title = title;
|
||||
this.message = message;
|
||||
this.messageLong = messageLong;
|
||||
this.show();
|
||||
}
|
||||
|
||||
|
||||
public void showError(String title, String message) {
|
||||
indeterminate = false;
|
||||
this.title = title;
|
||||
this.message = message;
|
||||
|
|
|
|||
|
|
@ -5,8 +5,10 @@ import android.content.Context;
|
|||
import android.content.Intent;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import io.github.sspanak.tt9.R;
|
||||
import io.github.sspanak.tt9.languages.Language;
|
||||
import io.github.sspanak.tt9.preferences.PreferencesActivity;
|
||||
import io.github.sspanak.tt9.preferences.screens.languages.LanguagesScreen;
|
||||
|
||||
|
|
@ -18,7 +20,7 @@ public class DictionaryProgressNotification extends DictionaryNotification {
|
|||
|
||||
|
||||
protected DictionaryProgressNotification(Context context) {
|
||||
super(context);
|
||||
super(context, null);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -32,7 +34,7 @@ public class DictionaryProgressNotification extends DictionaryNotification {
|
|||
|
||||
|
||||
@Override
|
||||
protected final PendingIntent createNavigationIntent(Context context) {
|
||||
protected final PendingIntent createNavigationIntent(@NonNull Context context, @Nullable Language language) {
|
||||
Intent intent = new Intent(context, PreferencesActivity.class);
|
||||
intent.putExtra("screen", LanguagesScreen.NAME);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,52 @@
|
|||
package io.github.sspanak.tt9.ui.notifications;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.app.NotificationCompat;
|
||||
|
||||
import io.github.sspanak.tt9.R;
|
||||
import io.github.sspanak.tt9.languages.Language;
|
||||
import io.github.sspanak.tt9.ui.dialogs.AutoUpdateMonologue;
|
||||
|
||||
public class DictionaryUpdateNotification extends DictionaryNotification {
|
||||
private final Language language;
|
||||
|
||||
|
||||
public DictionaryUpdateNotification(@NonNull Context context, @NonNull Language language) {
|
||||
super(context, language);
|
||||
this.language = language;
|
||||
notificationBuilder.addAction(getAction(context));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected PendingIntent createNavigationIntent(@NonNull Context context, @Nullable Language language) {
|
||||
Intent intent = AutoUpdateMonologue.generateShowIntent(context, language != null ? language.getId() : -1);
|
||||
return PendingIntent.getActivity(context, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
|
||||
}
|
||||
|
||||
|
||||
private NotificationCompat.Action getAction(Context context) {
|
||||
return new NotificationCompat.Action(
|
||||
R.drawable.ic_dictionary_update,
|
||||
resources.getString(R.string.dictionary_update_update),
|
||||
createNavigationIntent(context, language)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void show() {
|
||||
notificationBuilder.setSmallIcon(R.drawable.ic_dictionary_update);
|
||||
messageLong = message = resources.getString(R.string.dictionary_update_message, language.getName());
|
||||
super.show();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void showError(@NonNull String ignored, @NonNull String ignored2) {}
|
||||
}
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="#FFFFFF"
|
||||
android:autoMirrored="true">
|
||||
<group android:scaleX="1.0036364"
|
||||
android:scaleY="1.0036364"
|
||||
android:translateX="-0.043636363"
|
||||
android:translateY="-1.0472727">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M21,5c-1.11,-0.35 -2.33,-0.5 -3.5,-0.5c-1.95,0 -4.05,0.4 -5.5,1.5c-1.45,-1.1 -3.55,-1.5 -5.5,-1.5S2.45,4.9 1,6v14.65c0,0.25 0.25,0.5 0.5,0.5c0.1,0 0.15,-0.05 0.25,-0.05C3.1,20.45 5.05,20 6.5,20c1.95,0 4.05,0.4 5.5,1.5c1.35,-0.85 3.8,-1.5 5.5,-1.5c1.65,0 3.35,0.3 4.75,1.05c0.1,0.05 0.15,0.05 0.25,0.05c0.25,0 0.5,-0.25 0.5,-0.5V6C22.4,5.55 21.75,5.25 21,5zM21,18.5c-1.1,-0.35 -2.3,-0.5 -3.5,-0.5c-1.7,0 -4.15,0.65 -5.5,1.5V8c1.35,-0.85 3.8,-1.5 5.5,-1.5c1.2,0 2.4,0.15 3.5,0.5V18.5z"/>
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M17.5,10.5c0.88,0 1.73,0.09 2.5,0.26V9.24C19.21,9.09 18.36,9 17.5,9c-1.7,0 -3.24,0.29 -4.5,0.83v1.66C14.13,10.85 15.7,10.5 17.5,10.5z"/>
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M13,12.49v1.66c1.13,-0.64 2.7,-0.99 4.5,-0.99c0.88,0 1.73,0.09 2.5,0.26V11.9c-0.79,-0.15 -1.64,-0.24 -2.5,-0.24C15.8,11.66 14.26,11.96 13,12.49z"/>
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M17.5,14.33c-1.7,0 -3.24,0.29 -4.5,0.83v1.66c1.13,-0.64 2.7,-0.99 4.5,-0.99c0.88,0 1.73,0.09 2.5,0.26v-1.52C19.21,14.41 18.36,14.33 17.5,14.33z"/>
|
||||
</group>
|
||||
</vector>
|
||||
BIN
app/src/main/res/drawable-hdpi/ic_dictionary_update.png
Normal file
BIN
app/src/main/res/drawable-hdpi/ic_dictionary_update.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 508 B |
BIN
app/src/main/res/drawable-mdpi/ic_dictionary_update.png
Normal file
BIN
app/src/main/res/drawable-mdpi/ic_dictionary_update.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 346 B |
BIN
app/src/main/res/drawable-xhdpi/ic_dictionary_update.png
Normal file
BIN
app/src/main/res/drawable-xhdpi/ic_dictionary_update.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 721 B |
BIN
app/src/main/res/drawable-xxhdpi/ic_dictionary_update.png
Normal file
BIN
app/src/main/res/drawable-xxhdpi/ic_dictionary_update.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 957 B |
|
|
@ -57,7 +57,7 @@
|
|||
<string name="delete_words_deleted_confirm_deletion_title">Потвърдете изтриването</string>
|
||||
<string name="delete_words_deleted_confirm_deletion_question">Наистина ли искате да изтриете „%1$s“?</string>
|
||||
<string name="delete_words_deleted_x">„%1$s“ беше изтрита.</string>
|
||||
<string name="dictionary_update_message">Налично е обновление на речника за „%1$s“. Искате ли да го заредите?</string>
|
||||
<string name="dictionary_update_message">Налично е обновление на речника за „%1$s“.</string>
|
||||
<string name="dictionary_update_update">Зареди</string>
|
||||
<string name="donate_title">Дарете</string>
|
||||
<string name="donate_summary">Ако харесвате %1$s, подкрепете разработката му на: %2$s.</string>
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@
|
|||
<string name="delete_words_deleted_confirm_deletion_title">Löschung bestätigen</string>
|
||||
<string name="delete_words_deleted_confirm_deletion_question">Sind Sie sicher, dass Sie \"%1$s\" löschen möchten?</string>
|
||||
<string name="delete_words_deleted_x">\"%1$s\" wurde gelöscht.</string>
|
||||
<string name="dictionary_update_message">" Wörterbuchupdate verfügbar für „%1$s“. Möchten Sie es laden?"</string>
|
||||
<string name="dictionary_update_message">" Wörterbuchupdate verfügbar für „%1$s“."</string>
|
||||
<string name="dictionary_update_update">Laden</string>
|
||||
<string name="donate_title">Spenden</string>
|
||||
<string name="donate_summary">Wenn Ihnen %1$s gefällt, könnten Sie die Entwicklung auf %2$s unterstützen.</string>
|
||||
|
|
|
|||
|
|
@ -104,7 +104,7 @@
|
|||
<string name="delete_words_deleted_confirm_deletion_title">Confirma la eliminación</string>
|
||||
<string name="delete_words_deleted_confirm_deletion_question">¿Estás seguro de que quieres eliminar \"%1$s\"?</string>
|
||||
<string name="delete_words_deleted_x">\"%1$s\" fue eliminada.</string>
|
||||
<string name="dictionary_update_message">Actualización del diccionario disponible para «%1$s». ¿Te gustaría cargarlo?</string>
|
||||
<string name="dictionary_update_message">Actualización del diccionario disponible para «%1$s».</string>
|
||||
<string name="dictionary_update_update">Cargar</string>
|
||||
<string name="donate_title">Donar</string>
|
||||
<string name="donate_summary">Si te gusta %1$s, podrías apoyar su desarrollo en: %2$s.</string>
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@
|
|||
<string name="delete_words_deleted_confirm_deletion_title">Confirmer la suppression</string>
|
||||
<string name="delete_words_deleted_confirm_deletion_question">Êtes-vous sûr de vouloir supprimer « %1$s » ?</string>
|
||||
<string name="delete_words_deleted_x">\"%1$s\" a été supprimé.</string>
|
||||
<string name="dictionary_update_message">Mise à jour du dictionnaire «%1$s» disponible. Souhaitez-vous le charger ?</string>
|
||||
<string name="dictionary_update_message">Mise à jour du dictionnaire «%1$s» disponible.</string>
|
||||
<string name="dictionary_update_update">Charger</string>
|
||||
<string name="donate_title">Donner</string>
|
||||
<string name="donate_summary">Si vous aimez %1$s vous pouvez soutenir son développement à : %2$s</string>
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@
|
|||
<string name="delete_words_deleted_confirm_deletion_title">Conferma l\'eliminazione</string>
|
||||
<string name="delete_words_deleted_confirm_deletion_question">Sei sicuro di voler eliminare \"%1$s\"?</string>
|
||||
<string name="delete_words_deleted_x">\"%1$s\" è stata eliminata.</string>
|
||||
<string name="dictionary_update_message">Aggiornamento del dizionario disponibile per \"%1$s\". Vuoi caricarlo?</string>
|
||||
<string name="dictionary_update_message">Aggiornamento del dizionario disponibile per \"%1$s\".</string>
|
||||
<string name="dictionary_update_update">Carica</string>
|
||||
<string name="donate_title">Donare</string>
|
||||
<string name="donate_summary">Se ti piace %1$s, potresti supportarne lo sviluppo su: %2$s.</string>
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@
|
|||
<string name="delete_words_deleted_confirm_deletion_title">אישור מחיקה</string>
|
||||
<string name="delete_words_deleted_confirm_deletion_question">האם אתה בטוח שברצונך להסיר את \"%1$s\"?</string>
|
||||
<string name="delete_words_deleted_x">\"%1$s\" נמחקה.</string>
|
||||
<string name="dictionary_update_message">עדכון מילון זמין עבור \"%1$s\". האם תרצה לטעון אותו?</string>
|
||||
<string name="dictionary_update_message">עדכון למילון זמין עבור \"%1$s\"</string>
|
||||
<string name="dictionary_update_update">טען</string>
|
||||
<string name="donate_title">לִתְרוֹם</string>
|
||||
<string name="donate_summary">אם אתה אוהב את %1$s, תוכל לתמוך בפיתוח שלו בכתובת: %2$s</string>
|
||||
|
|
|
|||
|
|
@ -123,7 +123,7 @@
|
|||
<string name="delete_words_deleted_confirm_deletion_title">Patvirtinkite ištrynimą</string>
|
||||
<string name="delete_words_deleted_confirm_deletion_question">Ar tikrai norite ištrinti „%1$s“?</string>
|
||||
<string name="delete_words_deleted_x">„%1$s“ buvo ištrintas.</string>
|
||||
<string name="dictionary_update_message">Atnaujinta žodyno versija skirta \"%1$s\". Ar norėtumėte ją įkelti?</string>
|
||||
<string name="dictionary_update_message">Atnaujinta žodyno versija skirta \"%1$s\".</string>
|
||||
<string name="dictionary_update_update">Įkelti</string>
|
||||
<string name="donate_title">Paaukoti</string>
|
||||
<string name="donate_summary">Jei jums patinka %1$s, galite paremti jo plėtrą čia: %2$s.</string>
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@
|
|||
<string name="delete_words_deleted_confirm_deletion_title">Bevestig verwijdering</string>
|
||||
<string name="delete_words_deleted_confirm_deletion_question">Weet u zeker dat u \"%1$s\" wilt verwijderen?</string>
|
||||
<string name="delete_words_deleted_x">\"%1$s\" is verwijderd.</string>
|
||||
<string name="dictionary_update_message">Woordenboekupdate beschikbaar voor \"%1$s\". Wil je het laden?</string>
|
||||
<string name="dictionary_update_message">Woordenboekupdate beschikbaar voor \"%1$s\".</string>
|
||||
<string name="dictionary_update_update">Laden</string>
|
||||
<string name="donate_title">Doneer</string>
|
||||
<string name="donate_summary">Als je %1$s leuk vindt, zou je de ontwikkeling kunnen ondersteunen op: %2$s.</string>
|
||||
|
|
|
|||
|
|
@ -105,7 +105,7 @@
|
|||
<string name="delete_words_deleted_confirm_deletion_title">Confirme a exclusão</string>
|
||||
<string name="delete_words_deleted_confirm_deletion_question">Tem certeza de que deseja excluir \"%1$s\"?</string>
|
||||
<string name="delete_words_deleted_x">\"%1$s\" foi excluída.</string>
|
||||
<string name="dictionary_update_message">Atualização do dicionário disponível para \"%1$s\". Você gostaria de carregá-lo?</string>
|
||||
<string name="dictionary_update_message">Atualização do dicionário disponível para \"%1$s\".</string>
|
||||
<string name="dictionary_update_update">Carregar</string>
|
||||
<string name="donate_title">Doar</string>
|
||||
<string name="donate_summary">Se você gosta de %1$s, você poderia apoiar o seu desenvolvimento em: %2$s.</string>
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@
|
|||
<string name="delete_words_deleted_confirm_deletion_title">Подтвердите удаление</string>
|
||||
<string name="delete_words_deleted_confirm_deletion_question">Уверены, что хотите удалить «%1$s»?</string>
|
||||
<string name="delete_words_deleted_x">\"%1$s\" было удалено.</string>
|
||||
<string name="dictionary_update_message">Доступно обновление словаря для «%1$s». Хотите загрузить его?</string>
|
||||
<string name="dictionary_update_message">Доступно обновление словаря для «%1$s».</string>
|
||||
<string name="dictionary_update_update">Загрузить</string>
|
||||
<string name="donate_title">Поддержать</string>
|
||||
<string name="donate_summary">Если вам нравится %1$s, вы можете поддержать его разработку по: %2$s.</string>
|
||||
|
|
|
|||
|
|
@ -90,7 +90,7 @@
|
|||
<string name="delete_words_deleted_confirm_deletion_title">Підтвердіть видалення</string>
|
||||
<string name="delete_words_deleted_confirm_deletion_question">Ви впевнені, що хочете видалити \"%1$s\"?</string>
|
||||
<string name="delete_words_deleted_x">\"%1$s\" було видалено.</string>
|
||||
<string name="dictionary_update_message">Доступне оновлення словника для \"%1$s\". Бажаєте його завантажити?</string>
|
||||
<string name="dictionary_update_message">Доступне оновлення словника для \"%1$s\".</string>
|
||||
<string name="dictionary_update_update">Завантажити</string>
|
||||
|
||||
<string name="donate_title">Підтримати</string>
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@
|
|||
<string name="delete_words_deleted_confirm_deletion_question">Are you sure you want to delete \"%1$s\"?</string>
|
||||
<string name="delete_words_deleted_x">\"%1$s\" was deleted.</string>
|
||||
|
||||
<string name="dictionary_update_message">Dictionary update available for \"%1$s\". Would you like to load it?</string>
|
||||
<string name="dictionary_update_message">Dictionary update available for \"%1$s\".</string>
|
||||
<string name="dictionary_update_update">Load</string>
|
||||
|
||||
<string name="donate_title">Donate</string>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue