Increase i18n flexibility

The following may seem weird, but it is necessary to give translators enough flexibility. For example, in Russian, Android's plural quantity "one" actually refers to "any number ending on 1 but not ending in 11". So while in English the extra non-plural form seems unnecessary duplication, it is necessary to give translators enough flexibility. Therefore, we use the plain string when meaning exactly 1, and otherwise use the plural forms.
This commit is contained in:
Sylvia van Os
2021-07-30 19:36:43 +02:00
parent edbf76c7dc
commit f4f3f2e307
23 changed files with 86 additions and 26 deletions

View File

@@ -1046,8 +1046,8 @@ public class LoyaltyCardEditActivity extends AppCompatActivity
case R.id.action_delete:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(getResources().getQuantityString(R.plurals.deleteCardsTitle, 1));
builder.setMessage(getResources().getQuantityString(R.plurals.deleteCardsConfirmation, 1, 1));
builder.setTitle(R.string.deleteTitle);
builder.setMessage(R.string.deleteConfirmation);
builder.setPositiveButton(R.string.confirm, (dialog, which) -> {
Log.e(TAG, "Deleting card: " + loyaltyCardId);

View File

@@ -117,8 +117,18 @@ public class MainActivity extends AppCompatActivity implements LoyaltyCardCursor
return true;
} else if(inputItem.getItemId() == R.id.action_delete) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle(getResources().getQuantityString(R.plurals.deleteCardsTitle, mAdapter.getSelectedItemCount()));
builder.setMessage(getResources().getQuantityString(R.plurals.deleteCardsConfirmation, mAdapter.getSelectedItemCount(), mAdapter.getSelectedItemCount()));
// The following may seem weird, but it is necessary to give translators enough flexibility.
// For example, in Russian, Android's plural quantity "one" actually refers to "any number ending on 1 but not ending in 11".
// So while in English the extra non-plural form seems unnecessary duplication, it is necessary to give translators enough flexibility.
// In here, we use the plain string when meaning exactly 1, and otherwise use the plural forms
if (mAdapter.getSelectedItemCount() == 1) {
builder.setTitle(R.string.deleteTitle);
builder.setMessage(R.string.deleteConfirmation);
} else {
builder.setTitle(getResources().getQuantityString(R.plurals.deleteCardsTitle, mAdapter.getSelectedItemCount()));
builder.setMessage(getResources().getQuantityString(R.plurals.deleteCardsConfirmation, mAdapter.getSelectedItemCount(), mAdapter.getSelectedItemCount()));
}
builder.setPositiveButton(R.string.confirm, (dialog, which) -> {
DBHelper db = new DBHelper(MainActivity.this);

View File

@@ -165,12 +165,14 @@
<string name="failedParsingImportUriError">Препратката не може да бъде анализирана за внасяне</string>
<string name="card_ids_copied">[не превеждай този низ, https://github.com/TheLastProject/Catima/issues/278]</string>
<string name="failedGeneratingShareURL">Грешка при създаване на адрес за споделяне. Изпратете доклад за дефект.</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Желаете ли картата да бъде премахната\?</item>
<item quantity="other">Желаете ли <xliff:g>%d</xliff:g> картати да бъдат премахнати\?</item>
</plurals>
<string name="deleteTitle">Премахване на карта</string>
<plurals name="deleteCardsTitle">
<item quantity="one">Премахване на карта</item>
<item quantity="other">Премахване на карти</item>
</plurals>
<string name="deleteConfirmation">Потвърдете премахване на карта</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Желаете ли картата да бъде премахната\?</item>
<item quantity="other">Желаете ли <xliff:g>%d</xliff:g> картати да бъдат премахнати\?</item>
</plurals>
</resources>

View File

@@ -49,4 +49,7 @@
<string name="selectBarcodeTitle">Vyberte čárový kód</string>
<string name="copy_to_clipboard_toast">ID karty zkopírováno do schránky</string>
<string name="deleteTitle">Odstzranit věrnostní kartu</string>
<string name="deleteConfirmation">Opravdu chcete smazat tuto věrnostní kartu?</string>
</resources>

View File

@@ -165,4 +165,6 @@
<item quantity="one">Ausgewählt: <xliff:g>%d</xliff:g> Karte</item>
<item quantity="other">Ausgewählt: <xliff:g>%d</xliff:g> Karten</item>
</plurals>
<string name="deleteTitle">Karte entfernen</string>
<string name="deleteConfirmation">Diese Karte löschen\?</string>
</resources>

View File

@@ -56,4 +56,6 @@
<string name="settings_light_theme">Φωτεινό</string>
<string name="settings_system_theme">Σύστημα</string>
<string name="barcode">Γραμμικός κώδικας</string>
<string name="deleteTitle">Αφαίρεση Κάρτας</string>
<string name="deleteConfirmation">Παρακαλώ επιβεβαιώστε ότι θέλετε να διαγράψετε αυτή την κάρτα.</string>
</resources>

View File

@@ -50,4 +50,6 @@
<string name="cancel">Nuligi</string>
<string name="action_add">Aldoni</string>
<string name="action_search">Serĉi</string>
<string name="deleteConfirmation">Ĉu forigi ĉi tiun karton\?</string>
<string name="deleteTitle">Forigi karton</string>
</resources>

View File

@@ -165,4 +165,6 @@
<item quantity="one">Seleccionadas: <xliff:g>%d</xliff:g> tarjeta</item>
<item quantity="other">Seleccionadas: <xliff:g>%d</xliff:g> tarjetas</item>
</plurals>
<string name="deleteTitle">Eliminar tarjeta</string>
<string name="deleteConfirmation">¿Quiere eliminar esta tarjeta\?</string>
</resources>

View File

@@ -154,4 +154,6 @@
<string name="photos">Valokuvat</string>
<string name="backImageDescription">Kortin takakuva</string>
<string name="frontImageDescription">Kortin etukuva</string>
<string name="deleteConfirmation">Poista tämä kortti\?</string>
<string name="deleteTitle">Poista kortti</string>
</resources>

View File

@@ -165,4 +165,6 @@
<item quantity="one">Sélectionnée : <xliff:g>%d</xliff:g> carte</item>
<item quantity="other">Sélectionnées : <xliff:g>%d</xliff:g> cartes</item>
</plurals>
<string name="deleteTitle">Supprimer la carte de fidélité</string>
<string name="deleteConfirmation">Supprimer cette carte \?</string>
</resources>

View File

@@ -165,4 +165,6 @@
<item quantity="one">Selezionata: <xliff:g>%d</xliff:g> carta</item>
<item quantity="other">Selezionate: <xliff:g>%d</xliff:g> carte</item>
</plurals>
<string name="deleteTitle">Rimuovi carta fedeltà</string>
<string name="deleteConfirmation">Eliminare questa carta\?</string>
</resources>

View File

@@ -163,4 +163,6 @@
<plurals name="selectedCardCount">
<item quantity="other">選択済み: <xliff:g>%d</xliff:g></item>
</plurals>
<string name="deleteConfirmation">このカードを削除しますか?</string>
<string name="deleteTitle">カードの削除</string>
</resources>

View File

@@ -76,4 +76,6 @@
<string name="starImage">즐겨찾기 별</string>
<string name="settings_display_barcode_max_brightness">바코드를 표시할 때 화면 밝기 높이기</string>
<string name="barcode">바코드</string>
<string name="deleteConfirmation">정말 이 카드를 삭제하시겠습니까\?</string>
<string name="deleteTitle">카드 제거</string>
</resources>

View File

@@ -167,4 +167,6 @@
<item quantity="few">Pasirinktos: <xliff:g>%d</xliff:g> kortelės</item>
<item quantity="other">Pasirinkta: <xliff:g>%d</xliff:g> kortelių</item>
</plurals>
<string name="deleteTitle">Panaikinti lojalumo kortelę</string>
<string name="deleteConfirmation">Ištrinti šią kortelę\?</string>
</resources>

View File

@@ -163,12 +163,14 @@
<item quantity="one"><xliff:g>%d</xliff:g> kort valgt</item>
<item quantity="other"><xliff:g>%d</xliff:g> kort valgt</item>
</plurals>
<string name="deleteConfirmation">Slett dette kortet\?</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Slett dette kortet for godt\?</item>
<item quantity="other">Slett disse <xliff:g xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">%d</xliff:g> kortene for godt\?</item>
</plurals>
<string name="turn_flashlight_on">Skru på lommelykten</string>
<string name="turn_flashlight_off">Skru av lommelykten</string>
<string name="deleteTitle">Fjern kundekort</string>
<plurals name="deleteCardsTitle">
<item quantity="one">Slett kort</item>
<item quantity="other">Slett kort</item>

View File

@@ -165,12 +165,15 @@
<item quantity="one"><xliff:g>%d</xliff:g> kaart geselecteerd</item>
<item quantity="other"><xliff:g>%d</xliff:g> kaarten geselecteerd</item>
</plurals>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Weet je zeker dat je deze kaart wilt verwijderen\?</item>
<item quantity="other">Weet je zeker dat je deze <xliff:g>%d</xliff:g> kaarten wilt verwijderen\?</item>
</plurals>
<string name="deleteTitle">Kaart verwijderen</string>
<plurals name="deleteCardsTitle">
<item quantity="one">Kaart verwijderen</item>
<item quantity="other">Kaarten verwijderen</item>
</plurals>
<string name="deleteConfirmation">Kaart verwijderen\?</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Weet je zeker dat je deze kaart wilt verwijderen\?</item>
<item quantity="other">Weet je zeker dat je deze <xliff:g>%d</xliff:g> kaarten wilt verwijderen\?</item>
</plurals>
</resources>

View File

@@ -81,4 +81,6 @@
<string name="star">Dodaj do ulubionych</string>
<string name="noBarcode">Brak kodu kreskowego</string>
<string name="barcodeType">Typ kodu kreskowego</string>
<string name="deleteTitle">Usuń kartę lojalnościową</string>
<string name="deleteConfirmation">Potwierdź, że chcesz usunąć tę kartę.</string>
</resources>

View File

@@ -169,16 +169,18 @@
<item quantity="many">Выбрано: <xliff:g>%d</xliff:g> карт</item>
<item quantity="other">Выбрано: <xliff:g>%d</xliff:g> карт</item>
</plurals>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Удалить эту карту\? Действие нельзя будет отменить.</item>
<item quantity="few">Удалить эти <xliff:g>%d</xliff:g> карты\? Действие нельзя будет отменить.</item>
<item quantity="many">Удалить эти <xliff:g>%d</xliff:g> карт\? Действие нельзя будет отменить.</item>
<item quantity="other">Удалить эти <xliff:g>%d</xliff:g> карт\? Действие нельзя будет отменить.</item>
</plurals>
<string name="deleteTitle">Удаление карты</string>
<plurals name="deleteCardsTitle">
<item quantity="one">Удалить карту</item>
<item quantity="few">Удалить карты</item>
<item quantity="many">Удалить карт</item>
<item quantity="other">Удалить карт</item>
</plurals>
<string name="deleteConfirmation">Удалить карту\?</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Удалить эту карту\? Действие нельзя будет отменить.</item>
<item quantity="few">Удалить эти <xliff:g>%d</xliff:g> карты\? Действие нельзя будет отменить.</item>
<item quantity="many">Удалить эти <xliff:g>%d</xliff:g> карт\? Действие нельзя будет отменить.</item>
<item quantity="other">Удалить эти <xliff:g>%d</xliff:g> карт\? Действие нельзя будет отменить.</item>
</plurals>
</resources>

View File

@@ -62,4 +62,6 @@
<string name="settings_category_title_ui">Používateľské prostredie</string>
<string name="settings_display_barcode_max_brightness">Zvýšiť jas pri zobrazení čiarového kódu </string>
<string name="settings_lock_barcode_orientation">Uzamkni orientáciu čiarového kódu</string>
</resources>
<string name="deleteTitle">Odstrániť kartu</string>
<string name="deleteConfirmation">Naozaj chcete túto kartu odstrániť?</string>
</resources>

View File

@@ -54,4 +54,6 @@
<string name="settings_category_title_ui">Uporabniški vmesnik</string>
<string name="settings_display_barcode_max_brightness">Povečaj osvetljenost prikaza črtne kode</string>
<string name="settings_lock_barcode_orientation">Zakleni orientacijo črtne kode</string>
<string name="deleteTitle">Odstrani kartico zvestobe</string>
<string name="deleteConfirmation">Prosim potrdite, če želite izbrisati to kartico.</string>
</resources>

View File

@@ -169,16 +169,18 @@
<item quantity="many">Обрано: <xliff:g>%d</xliff:g> карт</item>
<item quantity="other">Обрано: <xliff:g>%d</xliff:g> карт</item>
</plurals>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Видалити карту назавжди\?</item>
<item quantity="few">Видалити ці <xliff:g>%d</xliff:g> карти назавжди\?</item>
<item quantity="many">Видалити ці <xliff:g>%d</xliff:g> карт назавжди\?</item>
<item quantity="other">Видалити ці <xliff:g>%d</xliff:g> карт назавжди\?</item>
</plurals>
<string name="deleteTitle">Видалити карту</string>
<plurals name="deleteCardsTitle">
<item quantity="one">Видалити карту</item>
<item quantity="few">Видалити карти</item>
<item quantity="many">Видалити карт</item>
<item quantity="other">Видалити карт</item>
</plurals>
<string name="deleteConfirmation">Бажаєте видалити карту\?</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Видалити карту назавжди\?</item>
<item quantity="few">Видалити ці <xliff:g>%d</xliff:g> карти назавжди\?</item>
<item quantity="many">Видалити ці <xliff:g>%d</xliff:g> карт назавжди\?</item>
<item quantity="other">Видалити ці <xliff:g>%d</xliff:g> карт назавжди\?</item>
</plurals>
</resources>

View File

@@ -141,4 +141,6 @@
<string name="noGiftCards">点击 \"+\"加号按钮来添加卡片,或者先从⋮菜单中导入一些。</string>
<string name="action_add">添加</string>
<string name="action_search">搜索</string>
<string name="deleteConfirmation">删除此卡?</string>
<string name="deleteTitle">移除卡片</string>
</resources>

View File

@@ -29,14 +29,22 @@
<string name="confirm">Confirm</string>
<string name="lockScreen">Block Rotation</string>
<string name="unlockScreen">Unblock Rotation</string>
<!-- START NOTE: i18n oddness -->
<!-- The following may seem weird, but it is necessary to give translators enough flexibility.
For example, in Russian, Android's plural quantity "one" actually refers to "any number ending on 1 but not ending in 11".
So while in English the extra non-plural form seems unnecessary duplication, it is necessary to give translators enough flexibility.
In Catima, we use the plain string when meaning exactly 1, and otherwise use the plural forms -->
<string name="deleteTitle">Delete Card</string>
<plurals name="deleteCardsTitle">
<item quantity="one">Delete Card</item>
<item quantity="other">Delete Cards</item>
</plurals>
<string name="deleteConfirmation">Delete this card permanently?</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Delete this card permanently?</item>
<item quantity="one">Delete this one card permanently?</item>
<item quantity="other">Delete these <xliff:g>%d</xliff:g> cards permanently?</item>
</plurals>
<!-- END NOTE: i18n oddness -->
<string name="ok">OK</string>
<string name="copy_to_clipboard">Copy ID to clipboard</string>
<string name="share">Share</string>