toward making full use of getQuantityString(): add util method to pass

quantity through to java world, use it, convert English <string>
resources to <plurals> (using python script) based on parallel changes
in French, and modify callsites to call getQuantityString() where
R.string.xxx became R.plurals.xxx.
This commit is contained in:
Eric House 2015-03-18 21:23:30 -07:00
parent e89fdf7dc4
commit 5f33d99c2e
24 changed files with 1403 additions and 1008 deletions

File diff suppressed because it is too large Load diff

View file

@ -426,6 +426,36 @@ and_util_getUserString( XW_UtilCtxt* uc, XP_U16 stringCode )
return result;
}
/* FIXME: This will always return the same string, ignoring quantity all but
the first time (because of util->userStrings) */
static const XP_UCHAR*
and_util_getUserQuantityString( XW_UtilCtxt* uc, XP_U16 stringCode, XP_U16 quantity )
{
LOG_FUNC();
XP_UCHAR* result = "";
UTIL_CBK_HEADER("getUserQuantityString", "(II)Ljava/lang/String;" );
int index = stringCode - 1; /* see LocalizedStrIncludes.h */
XP_ASSERT( index < VSIZE( util->userStrings ) );
if ( ! util->userStrings[index] ) {
jstring jresult = (*env)->CallObjectMethod( env, util->jutil, mid,
stringCode, quantity );
jsize len = (*env)->GetStringUTFLength( env, jresult );
XP_UCHAR* buf = XP_MALLOC( util->util.mpool, len + 1 );
const char* jchars = (*env)->GetStringUTFChars( env, jresult, NULL );
XP_MEMCPY( buf, jchars, len );
buf[len] = '\0';
(*env)->ReleaseStringUTFChars( env, jresult, jchars );
deleteLocalRef( env, jresult );
util->userStrings[index] = buf;
}
result = util->userStrings[index];
UTIL_CBK_TAIL();
LOG_RETURNF( "%s", result );
return result;
}
static XP_Bool
and_util_warnIllegalWord( XW_UtilCtxt* uc, BadWordInfo* bwi,
@ -697,6 +727,7 @@ makeUtil( MPFORMAL EnvThreadInfo* ti, jobject jutil, CurGameInfo* gi,
SET_PROC(getCurSeconds);
SET_PROC(makeEmptyDict);
SET_PROC(getUserString);
SET_PROC(getUserQuantityString);
SET_PROC(warnIllegalWord);
#ifdef XWFEATURE_CHAT
SET_PROC(showChat);

View file

@ -158,16 +158,28 @@ obtenir une copie avec les mêmes paramètres.</string>
list_item_rename) -->
<string name="rename_label">Changer le nom de la partie pour :</string>
<!--<string name="confirm_seldeletes_fmt">Êtes-vous sûr de vouloir effacer les
%1$d parties sélectionnées ? Cette action ne peut pas être annulée.</string>-->
<plurals name="confirm_seldeletes_fmt">
<item quantity="other">Êtes-vous sûr de vouloir effacer les
%1$d parties sélectionnées ? Cette action ne peut pas être annulée.</item>
<item quantity="one">Êtes-vous sûr de vouloir effacer la partie
sélectionnée ? Cette action ne peut pas être annulée.</item>
<item quantity="other">Êtes-vous sûr de vouloir effacer les
%1$d parties sélectionnées ? Cette action ne peut pas être annulée.</item>
</plurals>
<!-- Text of confirmation dialog posted when list_item_reset menu
is selected -->
<string name="confirm_reset_fmt">Êtes-vous sûr de vouloir recommencer les %1$d
<!--<string name="confirm_reset_fmt">Êtes-vous sûr de vouloir recommencer les %1$d
parties sélectionnées ?\n\n(Recommencer fait perdre tous les coups et
toutes les informations de connexion.)</string>
toutes les informations de connexion.)</string>-->
<plurals name="confirm_reset_fmt">
<item quantity="one">Êtes-vous sûr de vouloir recommencer la
partie sélectionnée ?\n\n(Recommencer fait perdre tous les coups et
toutes les informations de connexion.)</item>
<item quantity="other">Êtes-vous sûr de vouloir recommencer les %1$d
parties sélectionnées ?\n\n(Recommencer fait perdre tous les coups et
toutes les informations de connexion.)</item>
</plurals>
<!--
############################################################
@ -582,9 +594,17 @@ hors-périphériques.</string>
<!--<string name="invite_msg_fmt">This game is missing %1$d remote
player[s]. Would you like to invite someone to join - assuming
you haven\'t already?</string>-->
<string name="invite_msg_fmt">Il manque %1$d joueur[s] distant[s] à cette
<!--<string name="invite_msg_fmt">Il manque %1$d joueur[s] distant[s] à cette
partie. Voulez-vous inviter quelqu\'un - - à moins que vous ne l\'ayez déjà
fait ?</string>-->
<plurals name="invite_msg_fmt">
<item quantity="one">Il manque un joueur distant à cette
partie. Voulez-vous inviter quelqu\'un -- à moins que vous ne l\'ayez déjà
fait ?</string>
fait ?</item>
<item quantity="other">Il manque %1$d joueurs distants à cette
partie. Voulez-vous inviter quelqu\'un -- à moins que vous ne l\'ayez déjà
fait ?</item>
</plurals>
<!-- Appended to message above if local device has NFC available -->
<!--<string name="invite_if_nfc">(Or just Tap to Invite - if the
@ -595,7 +615,11 @@ périphérique a aussi Android Beam et est proche.)</string>
<!-- Toast shown when players are missing, same time as above
but more subtle. -->
<!--<string name="players_miss_fmt">%1$d player[s] missing</string>-->
<string name="players_miss_fmt">%1$d joueur[s] manquant[s]</string>
<!--<string name="players_miss_fmt">%1$d joueur[s] manquant[s]</string>-->
<plurals name="players_miss_fmt">
<item quantity="one">%1$d joueur manquant</item>
<item quantity="other">%1$d joueurs manquants</item>
</plurals>
<!-- Most users create games with only two players, which is the
default, but Crosswords supports up to four. When I'm using
@ -622,8 +646,14 @@ distants. Assurez-vous d\'envoyer votre invitation à ce nombre de personnes.)</
only once per game. -->
<!--<string name="msg_relay_waiting_fmt">Device %1$d connected to relay in
room \"%2$s\". Waiting for %3$d player[s].</string>-->
<string name="msg_relay_waiting_fmt">Le périphérique %1$d est connecté au
relai dans le salon \"%2$s\". En attente de %3$d joueur[s].</string>
<!--<string name="msg_relay_waiting_fmt">Le périphérique %1$d est connecté au
relai dans le salon \"%2$s\". En attente de %3$d joueur[s].</string>-->
<plurals name="msg_relay_waiting_fmt">
<item quantity="one">Le périphérique %1$d est connecté au
relai dans le salon \"%2$s\". En attente d\'un joueur.</item>
<item quantity="other">Le périphérique %1$d est connecté au
relai dans le salon \"%2$s\". En attente de %3$d joueurs.</item>
</plurals>
<!-- Text of "toast" shown when a game is notified by the relay
that all expected players have registered. At this point
@ -761,7 +791,11 @@ coup ?</string>
<!--<string name="board_menu_game_resend">Resend messages</string>-->
<string name="board_menu_game_resend">Renvoyer les messages</string>
<!--<string name="resend_finished_fmt">Resend finished; sent %1$d message[s].</string>-->
<string name="resend_finished_fmt">Renvoi fini ; %1$d message[s] envoyé[s].</string>
<!--<string name="resend_finished_fmt">Renvoi fini ; %1$d message[s] envoyé[s].</string>-->
<plurals name="resend_finished_fmt">
<item quantity="one">Renvoi fini ; %1$d message envoyé.</item>
<item quantity="other">Renvoi fini ; %1$d messages envoyés.</item>
</plurals>
<!--
############################################################
@ -777,7 +811,11 @@ coup ?</string>
<string name="str_robot_moved_fmt">Le robot %1$s a joué ce coup :\u0020</string>
<!-- Notifies user of a robot trade move -->
<!--<string name="strd_robot_traded_fmt">exchanged %1$d tiles.</string>-->
<string name="strd_robot_traded_fmt">a échangé %1$d jetons.</string>
<!--<string name="strd_robot_traded_fmt">a échangé %1$d jetons.</string>-->
<plurals name="strd_robot_traded_fmt">
<item quantity="one">a échangé un jeton.</item>
<item quantity="other">a échangé %1$d jetons.</item>
</plurals>
<!-- title for window you get when you select menu with text
board_menu_game_counts -->
<!--<string name="strs_values_header_fmt">%1$s counts/values:\n</string>-->
@ -848,12 +886,22 @@ restants]</string>
<!-- First line in the remaining tiles dialog (reached by tapping
the number at left end of the scoreboard) -->
<!--<string name="strd_remains_header_fmt">%1$d tiles left in pool.</string>-->
<string name="strd_remains_header_fmt">%1$d jetons restants dans le sac.</string>
<!--<string name="strd_remains_header_fmt">%1$d jetons restants dans le sac.</string>-->
<plurals name="strd_remains_header_fmt">
<item quantity="one">%1$d jeton restant dans le sac.</item>
<item quantity="other">%1$d jetons restants dans le sac.</item>
</plurals>
<!-- Intro to the paragraph lisiting all of the tiles remaining -->
<!--<string name="strd_remains_expl_fmt">%1$d tiles left in pool and all
tray[s]:\n</string>-->
<string name="strd_remains_expl_fmt">%1$d jetons restants dans le sac et
tous les chevalets :\n</string>
<!--<string name="strd_remains_expl_fmt">%1$d jetons restants dans le sac et
tous les chevalets :\n</string>-->
<plurals name="strd_remains_expl_fmt">
<item quantity="one">%d jeton restant dans le sac et tous les
chevalets :\n</item>
<item quantity="other">%d jetons restants dans le sac et tous
les chevalets :\n</item>
</plurals>
<!-- text of dialog shown when the menu item board_menu_undo_last
is chosen. -->
@ -1419,8 +1467,14 @@ partie : %1$s .</string>
tiles (instead of forming a new word to earn points) -->
<!--<string name="query_trade_fmt">Are you sure you want to exchange the
%1$d selected tiles (%2$s)?</string>-->
<string name="query_trade_fmt">Êtes-vous sûr de vouloir échanger les %1$d
jetons sélectionnés (%2$s) ?</string>
<!--<string name="query_trade_fmt">Êtes-vous sûr de vouloir échanger les %1$d
jetons sélectionnés (%2$s) ?</string>-->
<plurals name="query_trade_fmt">
<item quantity="one">Êtes-vous sûr de vouloir échanger le
jeton sélectionné (%2$s) ?</item>
<item quantity="other">Êtes-vous sûr de vouloir échanger les %1$d
jetons sélectionnés (%2$s) ?</item>
</plurals>
<!-- ############################################################
# :Screens:
@ -2173,12 +2227,22 @@ ligne, les mots qui viennent d\'être joués.</string>
<!-- -->
<!--<string name="dict_browse_title_fmt">%1$s (%2$d words using %3$d-%4$d
tiles)</string>-->
<string name="dict_browse_title_fmt">%1$s (%2$d mots utilisant de %3$d à
%4$d jetons)</string>
<!--<string name="dict_browse_title_fmt">%1$s (%2$d mots utilisant de %3$d à
%4$d jetons)</string>-->
<plurals name="dict_browse_title_fmt">
<item quantity="one">%1$s (%2$d mot utilisant de %3$d à
%4$d jetons)</item>
<item quantity="other">%1$s (%2$d mots utilisant de %3$d à
%4$d jetons)</item>
</plurals>
<!-- -->
<!--<string name="dict_browse_title1_fmt">%1$s (%2$d words using %3$d
tiles)</string>-->
<string name="dict_browse_title1_fmt">%1$s (%2$d mots utilisant %3$d jetons)</string>
<!--<string name="dict_browse_title1_fmt">%1$s (%2$d mots utilisant %3$d jetons)</string>-->
<plurals name="dict_browse_title1_fmt">
<item quantity="one">%1$s (%2$d mot utilisant %3$d jetons)</item>
<item quantity="other">%1$s (%2$d mots utilisant %3$d jetons)</item>
</plurals>
<!-- -->
<!--<string name="dict_browse_nowords_fmt">No word in %1$s starts with
%2$s.</string>-->
@ -2274,14 +2338,28 @@ seulement des informations sur les jetons. Il n\'y a pas de mots à parcourir.</
<!--<string name="invite_bt_desc_fmt">Please select the %1$d device[s]
you want to include in this game. Use the \"%2$s\"
button if you don\'t see a device you expect.</string>-->
<string name="invite_bt_desc_fmt">Sélectionnez les %1$d périphériques que
<!--<string name="invite_bt_desc_fmt">Sélectionnez les %1$d périphériques que
vous voulez intégrer dans cette partie. Utilisez le bouton \"%2$s\" si vous ne
voyez pas un périphérique que vous attendez.</string>
voyez pas un périphérique que vous attendez.</string>-->
<plurals name="invite_bt_desc_fmt">
<item quantity="one">Sélectionnez le périphérique que
vous voulez intégrer dans cette partie. Utilisez le bouton \"%2$s\" si vous ne
voyez pas un périphérique que vous attendez.</item>
<item quantity="other">Sélectionnez les %1$d périphériques que
vous voulez intégrer dans cette partie. Utilisez le bouton \"%2$s\" si vous ne
voyez pas un périphérique que vous attendez.</item>
</plurals>
<!-- -->
<!--<string name="bt_resend_fmt">Bluetooth send to %1$s failed; retry %3$d in
%2$d seconds.</string>-->
<string name="bt_resend_fmt">Un envoi Bluetooth à %1$s a échoué ; essai
%3$d dans %2$d secondes.</string>
<!--<string name="bt_resend_fmt">Un envoi Bluetooth à %1$s a échoué ; essai
%3$d dans %2$d secondes.</string>-->
<plurals name="bt_resend_fmt">
<item quantity="one">Un envoi Bluetooth à %1$s a échoué ; essai
%3$d dans %2$d seconde.</item>
<item quantity="other">Un envoi Bluetooth à %1$s a échoué ; essai
%3$d dans %2$d secondes.</item>
</plurals>
<!-- -->
<!--<string name="bt_fail_fmt">Bluetooth sends to %1$s have failed too many
times. Re-open the game to try again.</string>-->
@ -2319,8 +2397,14 @@ fois. Ouvrez à nouveau la partie pour réessayer.</string>
<!-- -->
<!--<string name="invite_sms_desc_fmt">Please check the %1$d phone
number[s] you want to invite to your new game, then tap \"%2$s\".</string>-->
<string name="invite_sms_desc_fmt">Vérifiez les %1$d numéros de téléphone
que vous voulez inviter à votre partie, puis touchez \"%2$s\".</string>
<!--<string name="invite_sms_desc_fmt">Vérifiez les %1$d numéros de téléphone
que vous voulez inviter à votre partie, puis touchez \"%2$s\".</string>-->
<plurals name="invite_sms_desc_fmt">
<item quantity="one">Vérifiez le numéro de téléphone
que vous voulez inviter à votre partie, puis touchez \"%2$s\".</item>
<item quantity="other">Vérifiez les %1$d numéros de téléphone
que vous voulez inviter à votre partie, puis touchez \"%2$s\".</item>
</plurals>
<!-- -->
<!--<string name="manual_owner_name">(Not in contacts)</string>-->
<string name="manual_owner_name">(Pas dans les contacts)</string>
@ -2598,12 +2682,24 @@ mots ?</string>
<!--<string name="groups_confirm_del_fmt">Are you sure you want to delete
the %1$d selected group[s]?</string>-->
<string name="groups_confirm_del_fmt">Êtes-vous sûr de vouloir effacer les
%1$d groupes sélectionnés ?</string>
<!--<string name="groups_confirm_del_fmt">Êtes-vous sûr de vouloir effacer les
%1$d groupes sélectionnés ?</string>-->
<plurals name="groups_confirm_del_fmt">
<item quantity="one">Êtes-vous sûr de vouloir effacer le
groupe sélectionné ?</item>
<item quantity="other">Êtes-vous sûr de vouloir effacer les
%1$d groupes sélectionnés ?</item>
</plurals>
<!--<string name="groups_confirm_del_games_fmt">\n\n(%1$d game[s] will
also be deleted.)</string>-->
<string name="groups_confirm_del_games_fmt">\n\n(%1$d parties seront aussi
effacées.)</string>
<!--<string name="groups_confirm_del_games_fmt">\n\n(%1$d parties seront aussi
effacées.)</string>-->
<plurals name="groups_confirm_del_games_fmt">
<item quantity="one">\n\n(une partie sera aussi
effacée.)</item>
<item quantity="other">\n\n(%1$d parties seront aussi
effacées.)</item>
</plurals>
<!--<string name="rename_group_label">Change the name of this group to:</string>-->
<string name="rename_group_label">Changer le nom de ce groupe pour :</string>
@ -2616,7 +2712,11 @@ effacées.)</string>
parties, %1$s, ne peut pas être effacé.</string>
<!--<string name="group_name_fmt">%1$s (%2$d games)</string>-->
<string name="group_name_fmt">%1$s (%2$d parties)</string>
<!--<string name="group_name_fmt">%1$s (%2$d parties)</string>-->
<plurals name="group_name_fmt">
<item quantity="one">%1$s (%2$d partie)</item>
<item quantity="other">%1$s (%2$d parties)</item>
</plurals>
<!-- Button shown in game over dialog triggering creation of new
game with the same players and parameters as the one that
@ -2687,7 +2787,7 @@ pouvez utiliser l\'application des Paramètres Android pour l\'allumer.</string>
<string name="sms_ready_text">Toucher le périphérique récepteur maintenant</string>
<!--<string name="pct_suffix">\u0020pct.</string>-->
<string name="pct_suffix">\u0020prct.</string>
<string name="pct_suffix">\u0020pct.</string>
<!--<string name="menu_rateme">Rate Crosswords</string>-->
<string name="menu_rateme">Évaluer Crosswords</string>
@ -2711,10 +2811,20 @@ de mots à retenir</string>
<string name="slmenu_clear_sel">Effacer les mots sélectionnés</string>
<!--<string name="confirm_studylist_clear_fmt">Are you sure you want to
delete the %1$d selected word[s]?\n\n(This action cannot be undone.)</string>-->
<string name="confirm_studylist_clear_fmt">Êtes-vous sûr de vouloir effacer
les %1$d mots sélectionnés ?\n\n(Cette action ne peut pas être annulée.)</string>
<!--<string name="confirm_studylist_clear_fmt">Êtes-vous sûr de vouloir effacer
les %1$d mots sélectionnés ?\n\n(Cette action ne peut pas être annulée.)</string>-->
<plurals name="confirm_studylist_clear_fmt">
<item quantity="one">Êtes-vous sûr de vouloir effacer
le mot sélectionné ?\n\n(Cette action ne peut pas être annulée.)</item>
<item quantity="other">Êtes-vous sûr de vouloir effacer
les %1$d mots sélectionnés ?\n\n(Cette action ne peut pas être annulée.)</item>
</plurals>
<!--<string name="paste_done_fmt">%1$d word[s] copied</string>-->
<string name="paste_done_fmt">%1$d mots copiés</string>
<!--<string name="paste_done_fmt">%1$d mots copiés</string>-->
<plurals name="paste_done_fmt">
<item quantity="one">%1$d mot copié</item>
<item quantity="other">%1$d mots copiés</item>
</plurals>
<!--<string name="add_done_fmt">%1$s added to %2$s studylist</string>-->
<string name="add_done_fmt">%1$s ajouté à la liste d\'étude en %2$s</string>
<!--<string name="studylist_title_fmt">Studylist for %1$s</string>-->
@ -2758,7 +2868,11 @@ mails.</string>
<string name="loc_lang_local">%1$s (la votre)</string>
<!--<string name="new_xlations_fmt">Installed %1$d new translations</string>-->
<string name="new_xlations_fmt">%1$d nouvelles traductions installées</string>
<!--<string name="new_xlations_fmt">%1$d nouvelles traductions installées</string>-->
<plurals name="new_xlations_fmt">
<item quantity="one">%1$d nouvelle traduction installée</item>
<item quantity="other">%1$d nouvelles traductions installées</item>
</plurals>
<!--<string name="xlations_enabled_title">Enable local translating</string>-->
<string name="xlations_enabled_title">Activer les traductions locales</string>
@ -2847,7 +2961,11 @@ téléchargement : %2$dk\nNote : %2$s</string>
<!--<string name="dict_on_server">Tap to download</string>-->
<string name="dict_on_server">Toucher pour télécharger</string>
<!--<string name="lang_name_fmt">%1$s (%2$d wordlists)</string> -->
<string name="lang_name_fmt">%1$s (%2$d listes de mots)</string>
<!--<string name="lang_name_fmt">%1$s (%2$d listes de mots)</string> -->
<plurals name="lang_name_fmt">
<item quantity="one">%1$s (%2$d liste de mots)</item>
<item quantity="other">%1$s (%2$d listes de mots)</item>
</plurals>
<!--<string name="lang_unknown">Unknown</string>-->
<string name="lang_unknown">Inconnu</string>
@ -2878,11 +2996,23 @@ pour voir ce qui est disponible.</string>
inserted in the fourth. E.g "PlayerName moved more than 2 day[s],
4 hour[s] ago." -->
<!--<string name="nag_minutes_fmt">%1$d minute[s]</string>-->
<string name="nag_minutes_fmt">%1$d minute[s]</string>
<!--<string name="nag_minutes_fmt">%1$d minute[s]</string>-->
<plurals name="nag_minutes_fmt">
<item quantity="one">%1$d minute</item>
<item quantity="other">%1$d minutes</item>
</plurals>
<!--<string name="nag_hours_fmt">%1$d hour[s]</string>-->
<string name="nag_hours_fmt">%1$d heure[s]</string>
<!--<string name="nag_hours_fmt">%1$d heure[s]</string>-->
<plurals name="nag_hours_fmt">
<item quantity="one">%1$d heure</item>
<item quantity="other">%1$d heures</item>
</plurals>
<!--<string name="nag_days_fmt">%1$d day[s]</string>-->
<string name="nag_days_fmt">%1$d jour[s]</string>
<!--<string name="nag_days_fmt">%1$d jour[s]</string>-->
<plurals name="nag_days_fmt">
<item quantity="one">%1$d jour</item>
<item quantity="other">%1$d jours</item>
</plurals>
<!--<string name="nag_body_fmt">%1$s moved more than %2$s ago.</string>-->
<string name="nag_body_fmt">%1$s a joué il y a plus de %2$s.</string>
<!-- above is inserted in this the last time I warn -->
@ -2896,16 +3026,28 @@ pour voir ce qui est disponible.</string>
<!--<string name="lmi_pass_fmt">%1$s passed (0 points)</string>-->
<string name="lmi_pass_fmt">%1$s a passé (0 point)</string>
<!--<string name="lmi_move_fmt">%1$s played %2$s for %3$d points</string>-->
<string name="lmi_move_fmt">%1$s a joué %2$s pour %3$d points</string>
<!--<string name="lmi_move_fmt">%1$s a joué %2$s pour %3$d points</string>-->
<plurals name="lmi_move_fmt">
<item quantity="one">%1$s a joué %2$s pour %3$d point</item>
<item quantity="other">%1$s a joué %2$s pour %3$d points</item>
</plurals>
<!--<string name="lmi_trade_fmt">%1$s traded %2$d tiles</string>-->
<string name="lmi_trade_fmt">%1$s a échangé %2$d jetons</string>
<!--<string name="lmi_trade_fmt">%1$s a échangé %2$d jetons</string>-->
<plurals name="lmi_trade_fmt">
<item quantity="one">%1$s a échangé %2$d jeton</item>
<item quantity="other">%1$s a échangé %2$d jetons</item>
</plurals>
<!--<string name="lmi_phony_fmt">%1$s lost a turn</string>-->
<string name="lmi_phony_fmt">%1$s a perdu un tour</string>
<!--<string name="lmi_tiles_fmt">Tiles assigned to %1$s</string>-->
<string name="lmi_tiles_fmt">Jetons attribués à %1$s</string>
<!--<string name="bt_err_count_fmt">%1$d bluetooth errors so far</string>-->
<string name="bt_err_count_fmt">%1$d erreurs Bluetooth jusqu\'à maintenant</string>
<!--<string name="bt_err_count_fmt">%1$d erreurs Bluetooth jusqu\'à maintenant</string>-->
<plurals name="bt_err_count_fmt">
<item quantity="one">%1$d erreur Bluetooth jusqu\'à maintenant</item>
<item quantity="other">%1$d erreurs Bluetooth jusqu\'à maintenant</item>
</plurals>
<!--<string name="bt_no_devs">You currently have no paired Bluetooth
devices. Would you like to open the Android Settings Panel to add
@ -3006,7 +3148,11 @@ d\'autres joueurs quand elle sera ouverte.)</string>
<string name="nplayers_prompt">Nombre sur ce périphérique</string>
<!--XLATE-ME-->
<!--<string name="nplayers_fmt">%1$d player[s]</string>-->
<string name="nplayers_fmt">%1$d joueur[s]</string>
<!--<string name="nplayers_fmt">%1$d joueur[s]</string>-->
<plurals name="nplayers_fmt">
<item quantity="one">%1$d joueur</item>
<item quantity="other">%1$d joueurs</item>
</plurals>
<!--XLATE-ME-->
<!--<string name="err_dup_invite_fmt">Duplicate invitation rejected:
device \"%1$s\" has already accepted an invitation to this
@ -3217,7 +3363,9 @@ numéros de téléphones sont les mêmes</string>
<!--XLATE-ME-->
<string name="game_summary_field_gameid">gameid</string>
<!--XLATE-ME-->
<string name="game_summary_field_npackets">Pending packet count</string>
<!--<string name="game_summary_field_npackets">Pending packet count</string>-->
<string name="game_summary_field_npackets">Nombre de paquets en attente</string>
<!--XLATE-ME-->
<string name="expl_update_url">Update checks URL</string>
<!--<string name="expl_update_url">Update checks URL</string>-->
<string name="expl_update_url">URL de vérifications des mises à jour</string>
</resources>

View file

@ -37,7 +37,7 @@
they aren't available yet because the connection is not
complete. Displayed in the lists of players found in each
game listing. -->
<string name="missing_player">(not here yet)</string>
<string name="missing_player">(not here yet&#8230;)</string>
<!-- The display of each networked game includes one of three
states it can be in in the process of connecting to the
@ -91,10 +91,10 @@
-->
<!-- Brings up the Wordlists (formerly Dictionaries) screen -->
<string name="gamel_menu_dicts">Wordlists</string>
<string name="gamel_menu_dicts">Wordlists&#8230;</string>
<!-- text of menu that brings up the Settings (preferences) dialog -->
<string name="menu_prefs">App Settings</string>
<string name="menu_prefs">App Settings&#8230;</string>
<!-- Regardless of the setting of the connect_frequency
preference, checks the relay immediately for any moves for
@ -104,7 +104,7 @@
<!-- Text of progress indicator shown while check is being conducted -->
<string name="msgs_progress">Checking relay for moves
etc</string>
etc&#8230;</string>
<!-- If you choose the above option and have no networked games
you get this error message -->
@ -112,7 +112,7 @@
the relay.</string>
<!-- Brings up "About Crosswords" dialog -->
<string name="board_menu_file_about">About Crosswords</string>
<string name="board_menu_file_about">About Crosswords&#8230;</string>
<!--
############################################################
@ -126,11 +126,11 @@
<!-- ############## menu items ############## -->
<!-- pulls up dialog to configure the selected game -->
<string name="list_item_config">Game settings</string>
<string name="list_item_config">Game settings&#8230;</string>
<!-- pulls up dialog to rename (change name of) the selected game -->
<string name="list_item_rename">Rename</string>
<string name="list_item_rename">Rename&#8230;</string>
<!-- pulls up dialog to change the group of the selected game -->
<string name="list_item_move">Move to group</string>
<string name="list_item_move">Move to group&#8230;</string>
<!-- pulls up dialog to delete the selected game -->
<string name="list_item_delete">Delete game</string>
@ -169,9 +169,9 @@
<!-- Text of confirmation dialog posted when list_item_reset menu
is selected -->
<string name="confirm_reset_fmt">Are you sure you want to reset the %1$d
<plurals name="confirm_reset_fmt"><item quantity="other">Are you sure you want to reset the %1$d
selected game[s]?\n\n(Resetting erases all moves and any connection
information.)</string>
information.)</item></plurals>
<!--
############################################################
@ -186,7 +186,7 @@
<!-- text of item at bottom of dicts choice spinner. It
launches the browser pointed at the site where additional
wordlists can be found. -->
<string name="download_dicts">Download more</string>
<string name="download_dicts">Download more&#8230;</string>
<!-- One of the strings used in the right column of the list of
@ -499,7 +499,7 @@
<string name="button_trade_commit">Commit trade</string>
<string name="button_trade_cancel">Cancel trade</string>
<string name="entering_trade">Tap tiles to select</string>
<string name="entering_trade">Tap tiles to select&#8230;</string>
<!-- Bonus value hint that's displayed in gray text in the colored
@ -527,9 +527,9 @@
open such a game I give the user a chance to issue an
invititation while trying to warn him not to send duplicates.
The number of players missing is substituted for "%1$d". -->
<string name="invite_msg_fmt">This game is waiting for %1$d remote
<plurals name="invite_msg_fmt"><item quantity="other">This game is waiting for %1$d remote
player[s]. Would you like to invite someone to join -- assuming
you haven\'t already?</string>
you haven\'t already?</item></plurals>
<!-- Appended to message above if local device has NFC available -->
<string name="invite_if_nfc">Or just Tap to Invite -- if the other
@ -537,7 +537,7 @@
<!-- Toast shown when players are missing, same time as above
but more subtle. -->
<string name="players_miss_fmt">%1$d player[s] missing</string>
<plurals name="players_miss_fmt"><item quantity="other">%1$d player[s] missing</item></plurals>
<!-- Most users create games with only two players, which is the
default, but Crosswords supports up to four. When I'm using
@ -560,8 +560,8 @@
the room, and how many additional players have not yet
registered with the relay in this game. This should be seen
only once per game. -->
<string name="msg_relay_waiting_fmt">Device %1$d connected to relay in
room \"%2$s\". Waiting for %3$d player[s].</string>
<plurals name="msg_relay_waiting_fmt"><item quantity="other">Device %1$d connected to relay in
room \"%2$s\". Waiting for %3$d player[s].</item></plurals>
<!-- Text of "toast" shown when a game is notified by the relay
that all expected players have registered. At this point
@ -643,23 +643,23 @@
<string name="board_menu_undo_last">Undo last</string>
<!-- Title of submenu -->
<string name="board_submenu_game">Game -></string>
<string name="board_submenu_game">Game -&gt;</string>
<!-- menu on Game submenu: brings up dialog listing all tiles in
the language of the game along with how many of each there
are and how many points each is worth. This display is the
same throughout the game. -->
<string name="board_menu_game_counts">Counts and values</string>
<string name="board_menu_game_counts">Counts and values&#8230;</string>
<!-- menu on Game submenu: brings up dialog listing all tiles not
yet played and not in the rack of the player whose rack is
visible (whose turn it is, generally). This display will
change as tiles are used and depending on what player is
asking. -->
<string name="board_menu_game_left">Tiles remaining</string>
<string name="board_menu_game_left">Tiles remaining&#8230;</string>
<!-- Brings up listing of all moves played so far this game. -->
<string name="board_menu_game_history">Game history</string>
<string name="board_menu_game_history">Game history&#8230;</string>
<!-- Brings up explanation of the game's final score. If the game
is not yet over, gives you a choice whether to end it now,
@ -673,7 +673,7 @@
able to remove this from non-debug versions of the game
because users should not have to do do this EVER. -->
<string name="board_menu_game_resend">Resend messages</string>
<string name="resend_finished_fmt">Resend finished; sent %1$d message[s].</string>
<plurals name="resend_finished_fmt"><item quantity="other">Resend finished; sent %1$d message[s].</item></plurals>
<!--
############################################################
@ -687,7 +687,7 @@
<!-- Notifies user of a normal robot move -->
<string name="str_robot_moved_fmt">The robot %1$s made this move:\u0020</string>
<!-- Notifies user of a robot trade move -->
<string name="strd_robot_traded_fmt">exchanged %1$d tiles.</string>
<plurals name="strd_robot_traded_fmt"><item quantity="other">exchanged %1$d tiles.</item></plurals>
<!-- title for window you get when you select menu with text
board_menu_game_counts -->
<string name="strs_values_header_fmt">%1$s counts/values:\n</string>
@ -737,10 +737,10 @@
<!-- First line in the remaining tiles dialog (reached by tapping
the number at left end of the scoreboard) -->
<string name="strd_remains_header_fmt">%1$d tiles left in pool.</string>
<plurals name="strd_remains_header_fmt"><item quantity="other">%1$d tiles left in pool.</item></plurals>
<!-- Intro to the paragraph lisiting all of the tiles remaining -->
<string name="strd_remains_expl_fmt">%1$d tiles left in pool and all
tray[s]:\n</string>
<plurals name="strd_remains_expl_fmt"><item quantity="other">%1$d tiles left in pool and all
tray[s]:\n</item></plurals>
<!-- text of dialog shown when the menu item board_menu_undo_last
is chosen. -->
@ -815,7 +815,7 @@
<!-- Used to indicate that a preference is not enabled, i.e. not
part of the game and that the user should ignore it. -->
<string name="tell_unused">Not used yet</string>
<string name="tell_unused">Not used yet&#8230;</string>
<!-- sub-preference for dictionaries (soon to be called "word lists") -->
<string name="prefs_dicts">Wordlists</string>
@ -1162,9 +1162,9 @@
<!-- <string name="sms_or_email">Send invitation using SMS (texting) or -->
<!-- via email?</string> -->
<!-- <string name="nfc_or_email">Send invitation using NFC (Android -->
<!-- beaming NEW) or via email?</string> -->
<!-- beaming &#8211; NEW) or via email?</string> -->
<!-- <string name="nfc_or_sms_or_email">Send invitation using SMS -->
<!-- (texting) or NFC (\"Android beaming\" NEW) or via email?</string> -->
<!-- (texting) or NFC (\"Android beaming\" &#8211; NEW) or via email?</string> -->
<!-- When an invitation is sent, the user gets to choose between
plaintext and html formatting. These two strings are shown in the
@ -1210,8 +1210,8 @@
<!-- Text of dialog asking user to confirm a move that exchanges
tiles (instead of forming a new word to earn points) -->
<string name="query_trade_fmt">Are you sure you want to exchange the
%1$d selected tiles (%2$s)?</string>
<plurals name="query_trade_fmt"><item quantity="other">Are you sure you want to exchange the
%1$d selected tiles (%2$s)?</item></plurals>
<!-- ############################################################
# :Screens:
@ -1349,7 +1349,7 @@
Guest wordlists; Host wins.</string>
<string name="downloading_dict_fmt">Downloading %1$s</string>
<string name="downloading_dict_fmt">Downloading %1$s&#8230;</string>
<!--
############################################################
@ -1473,7 +1473,7 @@
sure you want to create another?</string>
<!-- Title of generic dialog used to display information -->
<string name="info_title">FYI</string>
<string name="info_title">FYI&#8230;</string>
<!-- title of dialog allowing user to pick tiles "face up". (This
feature is not yet supported on Android.) -->
@ -1511,7 +1511,7 @@
<!-- Title for generic dialog asking a question, usually in the
middle of a game, like "do you want to commit this move?"-->
<string name="query_title">A question</string>
<string name="query_title">A question&#8230;</string>
<!--
###########################################################
@ -1771,11 +1771,11 @@
<string name="pick_faceup">Pick tiles face-up</string>
<!-- -->
<string name="dict_browse_title_fmt">%1$s (%2$d words using %3$d-%4$d
tiles)</string>
<plurals name="dict_browse_title_fmt"><item quantity="other">%1$s (%2$d words using %3$d-%4$d
tiles)</item></plurals>
<!-- -->
<string name="dict_browse_title1_fmt">%1$s (%2$d words using %3$d
tiles)</string>
<plurals name="dict_browse_title1_fmt"><item quantity="other">%1$s (%2$d words using %3$d
tiles)</item></plurals>
<!-- -->
<string name="dict_browse_nowords_fmt">No word in %1$s starts with
%2$s.</string>
@ -1848,12 +1848,12 @@
<!-- -->
<string name="new_move_body">One or more moves has arrived</string>
<!-- -->
<string name="invite_bt_desc_fmt">Please select up to %1$d device[s]
<plurals name="invite_bt_desc_fmt"><item quantity="other">Please select up to %1$d device[s]
you want to include in this game. Use the \"%2$s\"
button if you don\'t see a device you expect.</string>
button if you don\'t see a device you expect.</item></plurals>
<!-- -->
<string name="bt_resend_fmt">Bluetooth send to %1$s failed; retry %3$d in
%2$d seconds.</string>
<plurals name="bt_resend_fmt"><item quantity="other">Bluetooth send to %1$s failed; retry %3$d in
%2$d seconds.</item></plurals>
<!-- -->
<string name="bt_fail_fmt">Bluetooth sends to %1$s have failed too many
times. Re-open the game to try again.</string>
@ -1886,8 +1886,8 @@
<!-- -->
<string name="button_sms_add">Import contact</string>
<!-- -->
<string name="invite_sms_desc_fmt">Please check the %1$d phone
number[s] you want to invite to your new game, then tap \"%2$s\".</string>
<plurals name="invite_sms_desc_fmt"><item quantity="other">Please check the %1$d phone
number[s] you want to invite to your new game, then tap \"%2$s\".</item></plurals>
<!-- -->
<string name="manual_owner_name">(Not in contacts)</string>
<!-- -->
@ -1940,7 +1940,7 @@
<string name="board_menu_dict">Browse wordlist</string>
<!-- -->
<string name="game_list_tmp">Building game summary</string>
<string name="game_list_tmp">Building game summary&#8230;</string>
<!-- -->
<string name="connstat_nonet">This is a standalone game. There is
@ -2070,10 +2070,10 @@
<string name="group_cur_games">My games</string>
<string name="group_new_games">New games</string>
<string name="groups_confirm_del_fmt">Are you sure you want to delete
the %1$d selected group[s]?</string>
<string name="groups_confirm_del_games_fmt">\n\n(%1$d game[s] will
also be deleted.)</string>
<plurals name="groups_confirm_del_fmt"><item quantity="other">Are you sure you want to delete
the %1$d selected group[s]?</item></plurals>
<plurals name="groups_confirm_del_games_fmt"><item quantity="other">\n\n(%1$d game[s] will
also be deleted.)</item></plurals>
<string name="rename_group_label">Change the name of this group to:</string>
<string name="game_name_group_title">Name group</string>
@ -2081,7 +2081,7 @@
<string name="cannot_delete_default_group_fmt">The group for new games, %1$s,
cannot be deleted.</string>
<string name="group_name_fmt">%1$s (%2$d games)</string>
<plurals name="group_name_fmt"><item quantity="other">%1$s (%2$d games)</item></plurals>
<!-- Button shown in game over dialog triggering creation of new
game with the same players and parameters as the one that
@ -2130,7 +2130,7 @@
<!-- <string name="not_again_sms_ready">You have NFC enabled. That -->
<!-- means that any time a board that\'s missing a player is open, you -->
<!-- can tap a nearby person\'s device to invite him/her to -->
<!-- play if he/she is also using NFC.</string> -->
<!-- play &#8211; if he/she is also using NFC.</string> -->
<string name="pct_suffix">\u0020pct.</string>
@ -2141,13 +2141,13 @@
<string name="title_studyon">Enable studylists</string>
<string name="summary_studyon">Offer to add to and display lists
of words to remember</string>
<string name="gamel_menu_study">Studylist</string>
<string name="gamel_menu_study">Studylist&#8230;</string>
<string name="slmenu_copy_sel">Copy to clipboard</string>
<string name="slmenu_clear_sel">Delete selected</string>
<string name="confirm_studylist_clear_fmt">Are you sure you want to
delete the %1$d selected word[s]?\n\n(This action cannot be undone.)</string>
<string name="paste_done_fmt">%1$d word[s] copied</string>
<plurals name="confirm_studylist_clear_fmt"><item quantity="other">Are you sure you want to
delete the %1$d selected word[s]?\n\n(This action cannot be undone.)</item></plurals>
<plurals name="paste_done_fmt"><item quantity="other">%1$d word[s] copied</item></plurals>
<string name="add_done_fmt">%1$s added to %2$s studylist</string>
<string name="studylist_title_fmt">Studylist for %1$s</string>
@ -2172,7 +2172,7 @@
<string name="loc_lang_blessed">%1$s (official)</string>
<string name="loc_lang_local">%1$s (yours)</string>
<string name="new_xlations_fmt">Installed %1$d new translations</string>
<plurals name="new_xlations_fmt"><item quantity="other">Installed %1$d new translations</item></plurals>
<string name="xlations_enabled_title">Enable local translating</string>
<string name="xlations_enabled_summary">Add option to every screen menu</string>
@ -2202,8 +2202,8 @@
the same ones as the original.\n\n(You will not be able to save it
unless it does.)</string>
<string name="remote_empty">Fetching wordlist information from server</string>
<string name="remote_digesting">Processing wordlist information</string>
<string name="remote_empty">Fetching wordlist information from server&#8230;</string>
<string name="remote_digesting">Processing wordlist information&#8230;</string>
<string name="remote_no_net">Unable to fetch wordlist information
from server.</string>
<string name="getinfo">Get info</string>
@ -2221,14 +2221,14 @@
%2$dK\nNote: %3$s</string>
<string name="note_none">(None)</string>
<string name="dict_on_server">Tap to download</string>
<string name="lang_name_fmt">%1$s (%2$d wordlists)</string>
<plurals name="lang_name_fmt"><item quantity="other">%1$s (%2$d wordlists)</item></plurals>
<string name="lang_unknown">Unknown</string>
<string name="not_again_dicts">This screen lets you install new
wordslists and view the ones you already have.\n\nWhat wordlists
you have installed determines:\n What languages you can play
in\n• How smart the robot player is\n• What words are
you have installed determines:\n&#8226; What languages you can play
in\n&#8226; How smart the robot player is\n&#8226; What words are
legal.\n\nCheck the \"Show downloadable\" box at the top to see
what\'s available.</string>
@ -2241,9 +2241,9 @@
are used to build a string based on the length of time that's then
inserted in the fourth. E.g "PlayerName moved more than 2 day[s],
4 hour[s] ago." -->
<string name="nag_minutes_fmt">%1$d minute[s]</string>
<string name="nag_hours_fmt">%1$d hour[s]</string>
<string name="nag_days_fmt">%1$d day[s]</string>
<plurals name="nag_minutes_fmt"><item quantity="other">%1$d minute[s]</item></plurals>
<plurals name="nag_hours_fmt"><item quantity="other">%1$d hour[s]</item></plurals>
<plurals name="nag_days_fmt"><item quantity="other">%1$d day[s]</item></plurals>
<string name="nag_body_fmt">%1$s moved more than %2$s ago.</string>
<!-- above is inserted in this the last time I warn -->
<string name="nag_warn_last_fmt">Last warning: %1$s</string>
@ -2252,12 +2252,12 @@
<!-- formatting for last move summary in notifications -->
<string name="lmi_pass_fmt">%1$s passed (0 points)</string>
<string name="lmi_move_fmt">%1$s played %2$s for %3$d points</string>
<string name="lmi_trade_fmt">%1$s traded %2$d tiles</string>
<plurals name="lmi_move_fmt"><item quantity="other">%1$s played %2$s for %3$d points</item></plurals>
<plurals name="lmi_trade_fmt"><item quantity="other">%1$s traded %2$d tiles</item></plurals>
<string name="lmi_phony_fmt">%1$s lost a turn</string>
<string name="lmi_tiles_fmt">Tiles assigned to %1$s</string>
<string name="bt_err_count_fmt">%1$d bluetooth errors so far</string>
<plurals name="bt_err_count_fmt"><item quantity="other">%1$d bluetooth errors so far</item></plurals>
<string name="bt_no_devs">You currently have no paired Bluetooth
devices. Would you like to open the Android Settings Panel to add
@ -2289,7 +2289,7 @@
<string name="use_defaults">Use defaults</string>
<string name="nplayers_prompt">Number on this device</string>
<string name="nplayers_fmt">%1$d player[s]</string>
<plurals name="nplayers_fmt"><item quantity="other">%1$d player[s]</item></plurals>
<string name="err_dup_invite_fmt">Duplicate invitation rejected:
device \"%1$s\" has already accepted an invitation to this
game.</string>
@ -2320,7 +2320,7 @@
connect.)</string>
<string name="nfc_just_tap">To invite via NFC just touch the back
of this device against the one you want to inviteany time the
of this device against the one you want to invite&#8212;any time the
game is open.</string>
<string name="warn_no_comms">Every networked game must have at

View file

@ -147,9 +147,11 @@
</plurals>
<!-- Text of confirmation dialog posted when list_item_reset menu
is selected -->
<string name="confirm_reset_fmt">Era uoy erus uoy tnaw ot teser eht %1$d
<plurals name="confirm_reset_fmt">
<item quantity="other">Era uoy erus uoy tnaw ot teser eht %1$d
detceles ?]s[emag\n\ngNitteser( sesare lla sevom dna yna noitcennoc
noitamrofni.)</string>
noitamrofni.)</item>
</plurals>
<!--
############################################################
# :Screens:
@ -445,15 +447,19 @@
open such a game I give the user a chance to issue an
invititation while trying to warn him not to send duplicates.
The number of players missing is substituted for "%1$d". -->
<string name="invite_msg_fmt">Siht emag si gnitiaw rof %1$d etomer
<plurals name="invite_msg_fmt">
<item quantity="other">Siht emag si gnitiaw rof %1$d etomer
]s[reyalp. Dluow uoy ekil ot etivni enoemos ot nioj -- gnimussa
uoy nevah\'t ?ydaerla</string>
uoy nevah\'t ?ydaerla</item>
</plurals>
<!-- Appended to message above if local device has NFC available -->
<string name="invite_if_nfc">Ro tsuj Pat ot Etivni -- fi eht rehto
ecived osla sah Diordna Gnimaeb dna si ybraen.</string>
<!-- Toast shown when players are missing, same time as above
but more subtle. -->
<string name="players_miss_fmt">%1$d ]s[reyalp gnissim</string>
<plurals name="players_miss_fmt">
<item quantity="other">%1$d ]s[reyalp gnissim</item>
</plurals>
<!-- Most users create games with only two players, which is the
default, but Crosswords supports up to four. When I'm using
the above string to encourage the opener of a game missing
@ -473,8 +479,10 @@
the room, and how many additional players have not yet
registered with the relay in this game. This should be seen
only once per game. -->
<string name="msg_relay_waiting_fmt">Ecived %1$d detcennoc ot yaler ni
moor \"%2$s\". Gnitiaw rof %3$d ]s[reyalp.</string>
<plurals name="msg_relay_waiting_fmt">
<item quantity="other">Ecived %1$d detcennoc ot yaler ni
moor \"%2$s\". Gnitiaw rof %3$d ]s[reyalp.</item>
</plurals>
<!-- Text of "toast" shown when a game is notified by the relay
that all expected players have registered. At this point
play can begin. -->
@ -567,7 +575,9 @@
able to remove this from non-debug versions of the game
because users should not have to do do this EVER. -->
<string name="board_menu_game_resend">Dneser segassem</string>
<string name="resend_finished_fmt">Dneser dehsinif; tnes %1$d ]s[egassem.</string>
<plurals name="resend_finished_fmt">
<item quantity="other">Dneser dehsinif; tnes %1$d ]s[egassem.</item>
</plurals>
<!--
############################################################
# Board info/error dialog messages
@ -579,7 +589,9 @@
<!-- Notifies user of a normal robot move -->
<string name="str_robot_moved_fmt">Eht tobor %1$s edam siht evom:\u0020</string>
<!-- Notifies user of a robot trade move -->
<string name="strd_robot_traded_fmt">degnahcxe %1$d selit.</string>
<plurals name="strd_robot_traded_fmt">
<item quantity="other">degnahcxe %1$d selit.</item>
</plurals>
<!-- title for window you get when you select menu with text
board_menu_game_counts -->
<string name="strs_values_header_fmt">%1$s seulav/stnuoc:\n</string>
@ -627,10 +639,14 @@
<string name="strd_turn_score_fmt">Erocs rof nrut: %1$d\n</string>
<!-- First line in the remaining tiles dialog (reached by tapping
the number at left end of the scoreboard) -->
<string name="strd_remains_header_fmt">%1$d selit tfel ni loop.</string>
<plurals name="strd_remains_header_fmt">
<item quantity="other">%1$d selit tfel ni loop.</item>
</plurals>
<!-- Intro to the paragraph lisiting all of the tiles remaining -->
<string name="strd_remains_expl_fmt">%1$d selit tfel ni loop dna lla
]s[yart:\n</string>
<plurals name="strd_remains_expl_fmt">
<item quantity="other">%1$d selit tfel ni loop dna lla
]s[yart:\n</item>
</plurals>
<!-- text of dialog shown when the menu item board_menu_undo_last
is chosen. -->
<string name="confirm_undo_last">Era uoy erus uoy tnaw ot odnu eht
@ -994,9 +1010,9 @@
<!-- <string name="sms_or_email">Send invitation using SMS (texting) or -->
<!-- via email?</string> -->
<!-- <string name="nfc_or_email">Send invitation using NFC (Android -->
<!-- beaming NEW) or via email?</string> -->
<!-- beaming &#8211; NEW) or via email?</string> -->
<!-- <string name="nfc_or_sms_or_email">Send invitation using SMS -->
<!-- (texting) or NFC (\"Android beaming\" NEW) or via email?</string> -->
<!-- (texting) or NFC (\"Android beaming\" &#8211; NEW) or via email?</string> -->
<!-- When an invitation is sent, the user gets to choose between
plaintext and html formatting. These two strings are shown in the
two buttons in the dialog. -->
@ -1036,8 +1052,10 @@
<string name="invite_chooser_sms">sms</string>
<!-- Text of dialog asking user to confirm a move that exchanges
tiles (instead of forming a new word to earn points) -->
<string name="query_trade_fmt">Era uoy erus uoy tnaw ot egnahcxe eht
%1$d detceles selit (%2$s?)</string>
<plurals name="query_trade_fmt">
<item quantity="other">Era uoy erus uoy tnaw ot egnahcxe eht
%1$d detceles selit (%2$s?)</item>
</plurals>
<!-- ############################################################
# :Screens:
# Chat screen
@ -1515,11 +1533,15 @@
<!-- -->
<string name="pick_faceup">Kcip selit pu-ecaf</string>
<!-- -->
<string name="dict_browse_title_fmt">%1$s (%2$d sdrow gnisu %3$d-%4$d
)selit</string>
<plurals name="dict_browse_title_fmt">
<item quantity="other">%1$s (%2$d sdrow gnisu %3$d-%4$d
)selit</item>
</plurals>
<!-- -->
<string name="dict_browse_title1_fmt">%1$s (%2$d sdrow gnisu %3$d
)selit</string>
<plurals name="dict_browse_title1_fmt">
<item quantity="other">%1$s (%2$d sdrow gnisu %3$d
)selit</item>
</plurals>
<!-- -->
<string name="dict_browse_nowords_fmt">On drow ni %1$s strats htiw
%2$s.</string>
@ -1584,12 +1606,16 @@
<!-- -->
<string name="new_move_body">Eno ro erom sevom sah devirra</string>
<!-- -->
<string name="invite_bt_desc_fmt">Esaelp tceles pu ot %1$d ]s[ecived
<plurals name="invite_bt_desc_fmt">
<item quantity="other">Esaelp tceles pu ot %1$d ]s[ecived
uoy tnaw ot edulcni ni siht emag. Esu eht \"%2$s\"
nottub fi uoy nod\'t ees a ecived uoy tcepxe.</string>
nottub fi uoy nod\'t ees a ecived uoy tcepxe.</item>
</plurals>
<!-- -->
<string name="bt_resend_fmt">Htooteulb dnes ot %1$s deliaf; yrter %3$d ni
%2$d sdnoces.</string>
<plurals name="bt_resend_fmt">
<item quantity="other">Htooteulb dnes ot %1$s deliaf; yrter %3$d ni
%2$d sdnoces.</item>
</plurals>
<!-- -->
<string name="bt_fail_fmt">Htooteulb sdnes ot %1$s evah deliaf oot ynam
semit. Nepo-er eht emag ot yrt niaga.</string>
@ -1620,8 +1646,10 @@
<!-- -->
<string name="button_sms_add">Tropmi tcatnoc</string>
<!-- -->
<string name="invite_sms_desc_fmt">Esaelp kcehc eht %1$d enohp
]s[rebmun uoy tnaw ot etivni ot ruoy wen ,emag neht pat \"%2$s\".</string>
<plurals name="invite_sms_desc_fmt">
<item quantity="other">Esaelp kcehc eht %1$d enohp
]s[rebmun uoy tnaw ot etivni ot ruoy wen ,emag neht pat \"%2$s\".</item>
</plurals>
<!-- -->
<string name="manual_owner_name">tOn( ni )stcatnoc</string>
<!-- -->
@ -1781,15 +1809,21 @@
<string name="list_group_movedown">Evom nwod</string>
<string name="group_cur_games">Ym semag</string>
<string name="group_new_games">Wen semag</string>
<string name="groups_confirm_del_fmt">Era uoy erus uoy tnaw ot eteled
eht %1$d detceles ?]s[puorg</string>
<string name="groups_confirm_del_games_fmt">\n\n(%1$d ]s[emag lliw
osla eb deteled.)</string>
<plurals name="groups_confirm_del_fmt">
<item quantity="other">Era uoy erus uoy tnaw ot eteled
eht %1$d detceles ?]s[puorg</item>
</plurals>
<plurals name="groups_confirm_del_games_fmt">
<item quantity="other">\n\n(%1$d ]s[emag lliw
osla eb deteled.)</item>
</plurals>
<string name="rename_group_label">Egnahc eht eman fo siht puorg ot:</string>
<string name="game_name_group_title">Eman puorg</string>
<string name="cannot_delete_default_group_fmt">Eht puorg rof wen ,semag %1$s,
tonnac eb deteled.</string>
<string name="group_name_fmt">%1$s (%2$d )semag</string>
<plurals name="group_name_fmt">
<item quantity="other">%1$s (%2$d )semag</item>
</plurals>
<!-- Button shown in game over dialog triggering creation of new
game with the same players and parameters as the one that
just ended. -->
@ -1823,7 +1857,7 @@
<!-- <string name="not_again_sms_ready">You have NFC enabled. That -->
<!-- means that any time a board that\'s missing a player is open, you -->
<!-- can tap a nearby person\'s device to invite him/her to -->
<!-- play if he/she is also using NFC.</string> -->
<!-- play &#8211; if he/she is also using NFC.</string> -->
<string name="pct_suffix">\u0020tcp.</string>
<string name="menu_rateme">Etar Sdrowssorc</string>
<string name="no_market">Elgoog Yalp ppa ton dnuof</string>
@ -1834,9 +1868,13 @@
<string name="gamel_menu_study">Tsilyduts…</string>
<string name="slmenu_copy_sel">Ypoc ot draobpilc</string>
<string name="slmenu_clear_sel">Eteled detceles</string>
<string name="confirm_studylist_clear_fmt">Era uoy erus uoy tnaw ot
eteled eht %1$d detceles ?]s[drow\n\nsIht( noitca tonnac eb enodnu.)</string>
<string name="paste_done_fmt">%1$d ]s[drow deipoc</string>
<plurals name="confirm_studylist_clear_fmt">
<item quantity="other">Era uoy erus uoy tnaw ot
eteled eht %1$d detceles ?]s[drow\n\nsIht( noitca tonnac eb enodnu.)</item>
</plurals>
<plurals name="paste_done_fmt">
<item quantity="other">%1$d ]s[drow deipoc</item>
</plurals>
<string name="add_done_fmt">%1$s dedda ot %2$s tsilyduts</string>
<string name="studylist_title_fmt">Tsilyduts rof %1$s</string>
<string name="study_langpick">Ruoy sdrow rof:</string>
@ -1854,7 +1892,9 @@
<string name="loc_menu_xlate">Etalsnart</string>
<string name="loc_lang_blessed">%1$s )laiciffo(</string>
<string name="loc_lang_local">%1$s )sruoy(</string>
<string name="new_xlations_fmt">Dellatsni %1$d wen snoitalsnart</string>
<plurals name="new_xlations_fmt">
<item quantity="other">Dellatsni %1$d wen snoitalsnart</item>
</plurals>
<string name="xlations_enabled_title">Elbane lacol gnitalsnart</string>
<string name="xlations_enabled_summary">Dda noitpo ot yreve neercs unem</string>
<string name="data_gsm_only">SMS Atad si ylno elbaliava no MSG senohp.</string>
@ -1892,7 +1932,9 @@
%2$dK\nEton: %3$s</string>
<string name="note_none">)Enon(</string>
<string name="dict_on_server">Pat ot daolnwod</string>
<string name="lang_name_fmt">%1$s (%2$d )stsildrow</string>
<plurals name="lang_name_fmt">
<item quantity="other">%1$s (%2$d )stsildrow</item>
</plurals>
<string name="lang_unknown">Nwonknu</string>
<string name="not_again_dicts">Siht neercs stel uoy llatsni wen
stsilsdrow dna weiv eht seno uoy ydaerla evah.\n\nTahw stsildrow
@ -1908,9 +1950,15 @@
are used to build a string based on the length of time that's then
inserted in the fourth. E.g "PlayerName moved more than 2 day[s],
4 hour[s] ago." -->
<string name="nag_minutes_fmt">%1$d ]s[etunim</string>
<string name="nag_hours_fmt">%1$d ]s[ruoh</string>
<string name="nag_days_fmt">%1$d ]s[yad</string>
<plurals name="nag_minutes_fmt">
<item quantity="other">%1$d ]s[etunim</item>
</plurals>
<plurals name="nag_hours_fmt">
<item quantity="other">%1$d ]s[ruoh</item>
</plurals>
<plurals name="nag_days_fmt">
<item quantity="other">%1$d ]s[yad</item>
</plurals>
<string name="nag_body_fmt">%1$s devom erom naht %2$s oga.</string>
<!-- above is inserted in this the last time I warn -->
<string name="nag_warn_last_fmt">Tsal gninraw: %1$s</string>
@ -1918,11 +1966,17 @@
<string name="prev_player">Ruoy tnenoppo</string>
<!-- formatting for last move summary in notifications -->
<string name="lmi_pass_fmt">%1$s dessap 0( )stniop</string>
<string name="lmi_move_fmt">%1$s deyalp %2$s rof %3$d stniop</string>
<string name="lmi_trade_fmt">%1$s dedart %2$d selit</string>
<plurals name="lmi_move_fmt">
<item quantity="other">%1$s deyalp %2$s rof %3$d stniop</item>
</plurals>
<plurals name="lmi_trade_fmt">
<item quantity="other">%1$s dedart %2$d selit</item>
</plurals>
<string name="lmi_phony_fmt">%1$s tsol a nrut</string>
<string name="lmi_tiles_fmt">Selit dengissa ot %1$s</string>
<string name="bt_err_count_fmt">%1$d htooteulb srorre os raf</string>
<plurals name="bt_err_count_fmt">
<item quantity="other">%1$d htooteulb srorre os raf</item>
</plurals>
<string name="bt_no_devs">Uoy yltnerruc evah on deriap Htooteulb
secived. Dluow uoy ekil ot nepo eht Diordna Sgnittes Lenap ot dda
eno ro ?erom\n\nuOy( yam osla deen ot nepo ti no eht ecived uoy
@ -1946,7 +2000,9 @@
etivni rehto sreyalp nehw ti si nepo.)</string>
<string name="use_defaults">Esu stluafed</string>
<string name="nplayers_prompt">Rebmun no siht ecived</string>
<string name="nplayers_fmt">%1$d ]s[reyalp</string>
<plurals name="nplayers_fmt">
<item quantity="other">%1$d ]s[reyalp</item>
</plurals>
<string name="err_dup_invite_fmt">Etacilpud noitativni detcejer:
ecived \"%1$s\" sah ydaerla detpecca na noitativni ot siht
emag.</string>

View file

@ -147,9 +147,11 @@
</plurals>
<!-- Text of confirmation dialog posted when list_item_reset menu
is selected -->
<string name="confirm_reset_fmt">ARE YOU SURE YOU WANT TO RESET THE %1$d
<plurals name="confirm_reset_fmt">
<item quantity="other">ARE YOU SURE YOU WANT TO RESET THE %1$d
SELECTED GAME[S]?\n\n(RESETTING ERASES ALL MOVES AND ANY CONNECTION
INFORMATION.)</string>
INFORMATION.)</item>
</plurals>
<!--
############################################################
# :Screens:
@ -445,15 +447,19 @@
open such a game I give the user a chance to issue an
invititation while trying to warn him not to send duplicates.
The number of players missing is substituted for "%1$d". -->
<string name="invite_msg_fmt">THIS GAME IS WAITING FOR %1$d REMOTE
<plurals name="invite_msg_fmt">
<item quantity="other">THIS GAME IS WAITING FOR %1$d REMOTE
PLAYER[S]. WOULD YOU LIKE TO INVITE SOMEONE TO JOIN -- ASSUMING
YOU HAVEN\'T ALREADY?</string>
YOU HAVEN\'T ALREADY?</item>
</plurals>
<!-- Appended to message above if local device has NFC available -->
<string name="invite_if_nfc">OR JUST TAP TO INVITE -- IF THE OTHER
DEVICE ALSO HAS ANDROID BEAMING AND IS NEARBY.</string>
<!-- Toast shown when players are missing, same time as above
but more subtle. -->
<string name="players_miss_fmt">%1$d PLAYER[S] MISSING</string>
<plurals name="players_miss_fmt">
<item quantity="other">%1$d PLAYER[S] MISSING</item>
</plurals>
<!-- Most users create games with only two players, which is the
default, but Crosswords supports up to four. When I'm using
the above string to encourage the opener of a game missing
@ -473,8 +479,10 @@
the room, and how many additional players have not yet
registered with the relay in this game. This should be seen
only once per game. -->
<string name="msg_relay_waiting_fmt">DEVICE %1$d CONNECTED TO RELAY IN
ROOM \"%2$s\". WAITING FOR %3$d PLAYER[S].</string>
<plurals name="msg_relay_waiting_fmt">
<item quantity="other">DEVICE %1$d CONNECTED TO RELAY IN
ROOM \"%2$s\". WAITING FOR %3$d PLAYER[S].</item>
</plurals>
<!-- Text of "toast" shown when a game is notified by the relay
that all expected players have registered. At this point
play can begin. -->
@ -567,7 +575,9 @@
able to remove this from non-debug versions of the game
because users should not have to do do this EVER. -->
<string name="board_menu_game_resend">RESEND MESSAGES</string>
<string name="resend_finished_fmt">RESEND FINISHED; SENT %1$d MESSAGE[S].</string>
<plurals name="resend_finished_fmt">
<item quantity="other">RESEND FINISHED; SENT %1$d MESSAGE[S].</item>
</plurals>
<!--
############################################################
# Board info/error dialog messages
@ -579,7 +589,9 @@
<!-- Notifies user of a normal robot move -->
<string name="str_robot_moved_fmt">THE ROBOT %1$s MADE THIS MOVE:\u0020</string>
<!-- Notifies user of a robot trade move -->
<string name="strd_robot_traded_fmt">EXCHANGED %1$d TILES.</string>
<plurals name="strd_robot_traded_fmt">
<item quantity="other">EXCHANGED %1$d TILES.</item>
</plurals>
<!-- title for window you get when you select menu with text
board_menu_game_counts -->
<string name="strs_values_header_fmt">%1$s COUNTS/VALUES:\n</string>
@ -627,10 +639,14 @@
<string name="strd_turn_score_fmt">SCORE FOR TURN: %1$d\n</string>
<!-- First line in the remaining tiles dialog (reached by tapping
the number at left end of the scoreboard) -->
<string name="strd_remains_header_fmt">%1$d TILES LEFT IN POOL.</string>
<plurals name="strd_remains_header_fmt">
<item quantity="other">%1$d TILES LEFT IN POOL.</item>
</plurals>
<!-- Intro to the paragraph lisiting all of the tiles remaining -->
<string name="strd_remains_expl_fmt">%1$d TILES LEFT IN POOL AND ALL
TRAY[S]:\n</string>
<plurals name="strd_remains_expl_fmt">
<item quantity="other">%1$d TILES LEFT IN POOL AND ALL
TRAY[S]:\n</item>
</plurals>
<!-- text of dialog shown when the menu item board_menu_undo_last
is chosen. -->
<string name="confirm_undo_last">ARE YOU SURE YOU WANT TO UNDO THE
@ -994,9 +1010,9 @@
<!-- <string name="sms_or_email">Send invitation using SMS (texting) or -->
<!-- via email?</string> -->
<!-- <string name="nfc_or_email">Send invitation using NFC (Android -->
<!-- beaming NEW) or via email?</string> -->
<!-- beaming &#8211; NEW) or via email?</string> -->
<!-- <string name="nfc_or_sms_or_email">Send invitation using SMS -->
<!-- (texting) or NFC (\"Android beaming\" NEW) or via email?</string> -->
<!-- (texting) or NFC (\"Android beaming\" &#8211; NEW) or via email?</string> -->
<!-- When an invitation is sent, the user gets to choose between
plaintext and html formatting. These two strings are shown in the
two buttons in the dialog. -->
@ -1036,8 +1052,10 @@
<string name="invite_chooser_sms">SMS</string>
<!-- Text of dialog asking user to confirm a move that exchanges
tiles (instead of forming a new word to earn points) -->
<string name="query_trade_fmt">ARE YOU SURE YOU WANT TO EXCHANGE THE
%1$d SELECTED TILES (%2$s)?</string>
<plurals name="query_trade_fmt">
<item quantity="other">ARE YOU SURE YOU WANT TO EXCHANGE THE
%1$d SELECTED TILES (%2$s)?</item>
</plurals>
<!-- ############################################################
# :Screens:
# Chat screen
@ -1515,11 +1533,15 @@
<!-- -->
<string name="pick_faceup">PICK TILES FACE-UP</string>
<!-- -->
<string name="dict_browse_title_fmt">%1$s (%2$d WORDS USING %3$d-%4$d
TILES)</string>
<plurals name="dict_browse_title_fmt">
<item quantity="other">%1$s (%2$d WORDS USING %3$d-%4$d
TILES)</item>
</plurals>
<!-- -->
<string name="dict_browse_title1_fmt">%1$s (%2$d WORDS USING %3$d
TILES)</string>
<plurals name="dict_browse_title1_fmt">
<item quantity="other">%1$s (%2$d WORDS USING %3$d
TILES)</item>
</plurals>
<!-- -->
<string name="dict_browse_nowords_fmt">NO WORD IN %1$s STARTS WITH
%2$s.</string>
@ -1584,12 +1606,16 @@
<!-- -->
<string name="new_move_body">ONE OR MORE MOVES HAS ARRIVED</string>
<!-- -->
<string name="invite_bt_desc_fmt">PLEASE SELECT UP TO %1$d DEVICE[S]
<plurals name="invite_bt_desc_fmt">
<item quantity="other">PLEASE SELECT UP TO %1$d DEVICE[S]
YOU WANT TO INCLUDE IN THIS GAME. USE THE \"%2$s\"
BUTTON IF YOU DON\'T SEE A DEVICE YOU EXPECT.</string>
BUTTON IF YOU DON\'T SEE A DEVICE YOU EXPECT.</item>
</plurals>
<!-- -->
<string name="bt_resend_fmt">BLUETOOTH SEND TO %1$s FAILED; RETRY %3$d IN
%2$d SECONDS.</string>
<plurals name="bt_resend_fmt">
<item quantity="other">BLUETOOTH SEND TO %1$s FAILED; RETRY %3$d IN
%2$d SECONDS.</item>
</plurals>
<!-- -->
<string name="bt_fail_fmt">BLUETOOTH SENDS TO %1$s HAVE FAILED TOO MANY
TIMES. RE-OPEN THE GAME TO TRY AGAIN.</string>
@ -1620,8 +1646,10 @@
<!-- -->
<string name="button_sms_add">IMPORT CONTACT</string>
<!-- -->
<string name="invite_sms_desc_fmt">PLEASE CHECK THE %1$d PHONE
NUMBER[S] YOU WANT TO INVITE TO YOUR NEW GAME, THEN TAP \"%2$s\".</string>
<plurals name="invite_sms_desc_fmt">
<item quantity="other">PLEASE CHECK THE %1$d PHONE
NUMBER[S] YOU WANT TO INVITE TO YOUR NEW GAME, THEN TAP \"%2$s\".</item>
</plurals>
<!-- -->
<string name="manual_owner_name">(NOT IN CONTACTS)</string>
<!-- -->
@ -1781,15 +1809,21 @@
<string name="list_group_movedown">MOVE DOWN</string>
<string name="group_cur_games">MY GAMES</string>
<string name="group_new_games">NEW GAMES</string>
<string name="groups_confirm_del_fmt">ARE YOU SURE YOU WANT TO DELETE
THE %1$d SELECTED GROUP[S]?</string>
<string name="groups_confirm_del_games_fmt">\n\n(%1$d GAME[S] WILL
ALSO BE DELETED.)</string>
<plurals name="groups_confirm_del_fmt">
<item quantity="other">ARE YOU SURE YOU WANT TO DELETE
THE %1$d SELECTED GROUP[S]?</item>
</plurals>
<plurals name="groups_confirm_del_games_fmt">
<item quantity="other">\n\n(%1$d GAME[S] WILL
ALSO BE DELETED.)</item>
</plurals>
<string name="rename_group_label">CHANGE THE NAME OF THIS GROUP TO:</string>
<string name="game_name_group_title">NAME GROUP</string>
<string name="cannot_delete_default_group_fmt">THE GROUP FOR NEW GAMES, %1$s,
CANNOT BE DELETED.</string>
<string name="group_name_fmt">%1$s (%2$d GAMES)</string>
<plurals name="group_name_fmt">
<item quantity="other">%1$s (%2$d GAMES)</item>
</plurals>
<!-- Button shown in game over dialog triggering creation of new
game with the same players and parameters as the one that
just ended. -->
@ -1823,7 +1857,7 @@
<!-- <string name="not_again_sms_ready">You have NFC enabled. That -->
<!-- means that any time a board that\'s missing a player is open, you -->
<!-- can tap a nearby person\'s device to invite him/her to -->
<!-- play if he/she is also using NFC.</string> -->
<!-- play &#8211; if he/she is also using NFC.</string> -->
<string name="pct_suffix">\u0020PCT.</string>
<string name="menu_rateme">RATE CROSSWORDS</string>
<string name="no_market">GOOGLE PLAY APP NOT FOUND</string>
@ -1834,9 +1868,13 @@
<string name="gamel_menu_study">STUDYLIST…</string>
<string name="slmenu_copy_sel">COPY TO CLIPBOARD</string>
<string name="slmenu_clear_sel">DELETE SELECTED</string>
<string name="confirm_studylist_clear_fmt">ARE YOU SURE YOU WANT TO
DELETE THE %1$d SELECTED WORD[S]?\n\n(THIS ACTION CANNOT BE UNDONE.)</string>
<string name="paste_done_fmt">%1$d WORD[S] COPIED</string>
<plurals name="confirm_studylist_clear_fmt">
<item quantity="other">ARE YOU SURE YOU WANT TO
DELETE THE %1$d SELECTED WORD[S]?\n\n(THIS ACTION CANNOT BE UNDONE.)</item>
</plurals>
<plurals name="paste_done_fmt">
<item quantity="other">%1$d WORD[S] COPIED</item>
</plurals>
<string name="add_done_fmt">%1$s ADDED TO %2$s STUDYLIST</string>
<string name="studylist_title_fmt">STUDYLIST FOR %1$s</string>
<string name="study_langpick">YOUR WORDS FOR:</string>
@ -1854,7 +1892,9 @@
<string name="loc_menu_xlate">TRANSLATE</string>
<string name="loc_lang_blessed">%1$s (OFFICIAL)</string>
<string name="loc_lang_local">%1$s (YOURS)</string>
<string name="new_xlations_fmt">INSTALLED %1$d NEW TRANSLATIONS</string>
<plurals name="new_xlations_fmt">
<item quantity="other">INSTALLED %1$d NEW TRANSLATIONS</item>
</plurals>
<string name="xlations_enabled_title">ENABLE LOCAL TRANSLATING</string>
<string name="xlations_enabled_summary">ADD OPTION TO EVERY SCREEN MENU</string>
<string name="data_gsm_only">SMS DATA IS ONLY AVAILABLE ON GSM PHONES.</string>
@ -1892,7 +1932,9 @@
%2$dK\nNOTE: %3$s</string>
<string name="note_none">(NONE)</string>
<string name="dict_on_server">TAP TO DOWNLOAD</string>
<string name="lang_name_fmt">%1$s (%2$d WORDLISTS)</string>
<plurals name="lang_name_fmt">
<item quantity="other">%1$s (%2$d WORDLISTS)</item>
</plurals>
<string name="lang_unknown">UNKNOWN</string>
<string name="not_again_dicts">THIS SCREEN LETS YOU INSTALL NEW
WORDSLISTS AND VIEW THE ONES YOU ALREADY HAVE.\n\nWHAT WORDLISTS
@ -1908,9 +1950,15 @@
are used to build a string based on the length of time that's then
inserted in the fourth. E.g "PlayerName moved more than 2 day[s],
4 hour[s] ago." -->
<string name="nag_minutes_fmt">%1$d MINUTE[S]</string>
<string name="nag_hours_fmt">%1$d HOUR[S]</string>
<string name="nag_days_fmt">%1$d DAY[S]</string>
<plurals name="nag_minutes_fmt">
<item quantity="other">%1$d MINUTE[S]</item>
</plurals>
<plurals name="nag_hours_fmt">
<item quantity="other">%1$d HOUR[S]</item>
</plurals>
<plurals name="nag_days_fmt">
<item quantity="other">%1$d DAY[S]</item>
</plurals>
<string name="nag_body_fmt">%1$s MOVED MORE THAN %2$s AGO.</string>
<!-- above is inserted in this the last time I warn -->
<string name="nag_warn_last_fmt">LAST WARNING: %1$s</string>
@ -1918,11 +1966,17 @@
<string name="prev_player">YOUR OPPONENT</string>
<!-- formatting for last move summary in notifications -->
<string name="lmi_pass_fmt">%1$s PASSED (0 POINTS)</string>
<string name="lmi_move_fmt">%1$s PLAYED %2$s FOR %3$d POINTS</string>
<string name="lmi_trade_fmt">%1$s TRADED %2$d TILES</string>
<plurals name="lmi_move_fmt">
<item quantity="other">%1$s PLAYED %2$s FOR %3$d POINTS</item>
</plurals>
<plurals name="lmi_trade_fmt">
<item quantity="other">%1$s TRADED %2$d TILES</item>
</plurals>
<string name="lmi_phony_fmt">%1$s LOST A TURN</string>
<string name="lmi_tiles_fmt">TILES ASSIGNED TO %1$s</string>
<string name="bt_err_count_fmt">%1$d BLUETOOTH ERRORS SO FAR</string>
<plurals name="bt_err_count_fmt">
<item quantity="other">%1$d BLUETOOTH ERRORS SO FAR</item>
</plurals>
<string name="bt_no_devs">YOU CURRENTLY HAVE NO PAIRED BLUETOOTH
DEVICES. WOULD YOU LIKE TO OPEN THE ANDROID SETTINGS PANEL TO ADD
ONE OR MORE?\n\n(YOU MAY ALSO NEED TO OPEN IT ON THE DEVICE YOU
@ -1946,7 +2000,9 @@
INVITE OTHER PLAYERS WHEN IT IS OPEN.)</string>
<string name="use_defaults">USE DEFAULTS</string>
<string name="nplayers_prompt">NUMBER ON THIS DEVICE</string>
<string name="nplayers_fmt">%1$d PLAYER[S]</string>
<plurals name="nplayers_fmt">
<item quantity="other">%1$d PLAYER[S]</item>
</plurals>
<string name="err_dup_invite_fmt">DUPLICATE INVITATION REJECTED:
DEVICE \"%1$s\" HAS ALREADY ACCEPTED AN INVITATION TO THIS
GAME.</string>

View file

@ -75,7 +75,8 @@ public class BTInviteDelegate extends InviteDelegate {
m_counts = new HashMap<String, Integer>();
String msg = getString( R.string.bt_pick_addall_button );
msg = getString( R.string.invite_bt_desc_fmt, m_nMissing, msg );
msg = getQuantityString( R.plurals.invite_bt_desc_fmt, m_nMissing,
m_nMissing, msg );
super.init( R.id.button_invite, R.id.button_rescan,
R.id.button_clear, R.id.invite_desc, msg );
BTService.clearDevices( m_activity, null ); // will return names
@ -201,7 +202,7 @@ public class BTInviteDelegate extends InviteDelegate {
new ArrayAdapter<String>( m_activity, android.R.layout
.simple_spinner_item );
for ( int ii = 1; ii <= m_nMissing; ++ii ) {
String str = getString( R.string.nplayers_fmt, ii );
String str = getQuantityString( R.plurals.nplayers_fmt, ii, ii );
adapter.add( str );
}
spinner.setAdapter( adapter );

View file

@ -483,7 +483,7 @@ public class BoardDelegate extends DelegateBase
ad.getButton( AlertDialog.BUTTON_POSITIVE ).setVisibility( View.GONE );
} else {
titleID = R.string.waiting_title;
message = getString( R.string.invite_msg_fmt, m_nMissing );
message = getQuantityString( R.plurals.invite_msg_fmt, m_nMissing, m_nMissing );
String ps = null;
if ( m_nMissing > 1 ) {
@ -1385,8 +1385,8 @@ public class BoardDelegate extends DelegateBase
showDialog( DlgID.DLG_INVITE );
invalidateOptionsMenuIf();
} else {
toastStr = getString( R.string.msg_relay_waiting_fmt, devOrder,
room, nMissing );
toastStr = getQuantityString( R.plurals.msg_relay_waiting_fmt, nMissing,
devOrder, room, nMissing );
if ( devOrder == 1 ) {
naMsg = R.string.not_again_conndfirst;
naKey = R.string.key_notagain_conndfirst;
@ -1631,8 +1631,9 @@ public class BoardDelegate extends DelegateBase
public boolean confirmTrade( String[] tiles )
{
m_dlgTitle = R.string.info_title;
m_dlgBytes = getString( R.string.query_trade_fmt, tiles.length,
TextUtils.join( ", ", tiles ) );
m_dlgBytes =
getQuantityString( R.plurals.query_trade_fmt, tiles.length,
tiles.length, TextUtils.join( ", ", tiles ));
return 0 != waitBlockingDialog( DlgID.QUERY_REQUEST_BLK, 0 );
}

View file

@ -88,12 +88,12 @@ public class DictBrowseDelegate extends ListDelegateBase
XwJNI.dict_iter_setMinMax( m_dictClosure, m_browseState.m_minShown,
m_browseState.m_maxShown );
m_nWords = XwJNI.dict_iter_wordCount( m_dictClosure );
int format = m_browseState.m_minShown == m_browseState.m_maxShown ?
R.string.dict_browse_title1_fmt : R.string.dict_browse_title_fmt;
setTitle( getString( format,
m_name, m_nWords, m_browseState.m_minShown,
m_browseState.m_maxShown ));
R.plurals.dict_browse_title1_fmt : R.plurals.dict_browse_title_fmt;
setTitle( getQuantityString( format, m_nWords, m_name, m_nWords,
m_browseState.m_minShown,
m_browseState.m_maxShown ));
String desc = XwJNI.dict_iter_getDesc( m_dictClosure );
if ( null != desc ) {

View file

@ -187,8 +187,8 @@ public class DictsDelegate extends ListDelegateBase
int langCode = DictLangCache.getLangLangCode( m_context,
langName );
boolean expanded = ! m_closedLangs.contains( langName );
String name = getString( R.string.lang_name_fmt, langName,
info.m_numDicts );
String name = getQuantityString( R.plurals.lang_name_fmt, info.m_numDicts,
langName, info.m_numDicts );
result = ListGroup.make( m_context, convertView,
DictsDelegate.this, groupPos, name,
expanded );

View file

@ -457,8 +457,8 @@ public class DlgDelegate {
boolean asToast = true;
switch( event ) {
case MESSAGE_RESEND:
msg = getString( R.string.bt_resend_fmt, (String)args[0],
(Long)args[1], (Integer)args[2] );
msg = getQuantityString( R.plurals.bt_resend_fmt, 1, (String)args[0],
(Long)args[1], (Integer)args[2] );
break;
case MESSAGE_FAILOUT:
msg = getString( R.string.bt_fail_fmt, (String)args[0] );
@ -779,4 +779,9 @@ public class DlgDelegate {
{
return m_dlgt.getString( id, params );
}
private String getQuantityString( int id, int quantity, Object... params )
{
return m_dlgt.getQuantityString( id, quantity, params );
}
}

View file

@ -1163,7 +1163,11 @@ public class GameUtils {
{
if ( m_showUI ) {
int nSent = null == m_sink ? 0 : m_sink.numSent();
DbgUtils.showf( m_context, R.string.resend_finished_fmt, nSent );
String msg =
LocUtils.getQuantityString( m_context,
R.plurals.resend_finished_fmt,
nSent, nSent );
DbgUtils.showf( m_context, msg );
}
}
}

View file

@ -154,8 +154,11 @@ public class GamesListDelegate extends ListDelegateBase
GamesListDelegate.this );
updateGroupPct( group, ggi );
String name = LocUtils.getString( m_activity, R.string.group_name_fmt,
ggi.m_name, ggi.m_count );
String name =
LocUtils.getQuantityString( m_activity,
R.plurals.group_name_fmt,
ggi.m_count, ggi.m_name,
ggi.m_count );
group.setText( name );
group.setSelected( getSelected( group ) );
result = group;
@ -1497,16 +1500,16 @@ public class GamesListDelegate extends ListDelegateBase
} else {
long[] groupIDs = getSelGroupIDs();
Assert.assertTrue( 0 < groupIDs.length );
msg = getString( R.string.groups_confirm_del_fmt,
groupIDs.length );
msg = getQuantityString( R.plurals.groups_confirm_del_fmt,
groupIDs.length, groupIDs.length );
int nGames = 0;
for ( long tmp : groupIDs ) {
nGames += m_adapter.getChildrenCount( tmp );
}
if ( 0 < nGames ) {
msg += getString( R.string.groups_confirm_del_games_fmt,
nGames );
msg += getQuantityString( R.plurals.groups_confirm_del_games_fmt,
nGames, nGames );
}
showConfirmThen( msg, Action.DELETE_GROUPS, groupIDs );
}
@ -2112,7 +2115,8 @@ public class GamesListDelegate extends ListDelegateBase
private void doConfirmReset( long[] rowIDs )
{
String msg = getString( R.string.confirm_reset_fmt, rowIDs.length );
String msg = getQuantityString( R.plurals.confirm_reset_fmt,
rowIDs.length, rowIDs.length );
showConfirmThen( msg, R.string.button_reset, Action.RESET_GAMES,
rowIDs );
}

View file

@ -49,9 +49,9 @@ public class NagTurnReceiver extends BroadcastReceiver {
};
private static final int[][] s_fmtData = {
{ 60*60*24, R.string.nag_days_fmt },
{ 60*60, R.string.nag_hours_fmt },
{ 60, R.string.nag_minutes_fmt },
{ 60*60*24, R.plurals.nag_days_fmt },
{ 60*60, R.plurals.nag_hours_fmt },
{ 60, R.plurals.nag_minutes_fmt },
};
@Override
@ -183,7 +183,7 @@ public class NagTurnReceiver extends BroadcastReceiver {
for ( int[] datum : s_fmtData ) {
long val = seconds / datum[0];
if ( 1 <= val ) {
results.add( LocUtils.getString( context, datum[1], val ) );
results.add( LocUtils.getQuantityString( context, datum[1], (int)val, val ) );
seconds %= datum[0];
}
}

View file

@ -82,7 +82,8 @@ public class SMSInviteDelegate extends InviteDelegate {
protected void init( Bundle savedInstanceState )
{
String msg = getString( R.string.button_invite );
msg = getString( R.string.invite_sms_desc_fmt, m_nMissing, msg );
msg = getQuantityString( R.plurals.invite_sms_desc_fmt, m_nMissing,
m_nMissing, msg );
super.init( R.id.button_invite, R.id.button_add, R.id.button_clear,
R.id.invite_desc, msg );
@ -439,7 +440,7 @@ public class SMSInviteDelegate extends InviteDelegate {
new ArrayAdapter<String>( m_activity, android.R.layout
.simple_spinner_item );
for ( int ii = 1; ii <= m_nMissing; ++ii ) {
String str = getString( R.string.nplayers_fmt, ii );
String str = getQuantityString( R.plurals.nplayers_fmt, ii, ii );
adapter.add( str );
}
spinner.setAdapter( adapter );

View file

@ -123,8 +123,8 @@ public class StudyListDelegate extends ListDelegateBase
Action.SL_COPY_ACTION );
break;
case R.id.slmenu_clear_sel:
String msg = getString( R.string.confirm_studylist_clear_fmt,
m_checkeds.size() );
String msg = getQuantityString( R.plurals.confirm_studylist_clear_fmt,
m_checkeds.size(), m_checkeds.size() );
showConfirmThen( msg, Action.SL_CLEAR_ACTION );
break;
@ -171,8 +171,8 @@ public class StudyListDelegate extends ListDelegateBase
getSystemService( Context.CLIPBOARD_SERVICE );
clipboard.setText( TextUtils.join( "\n", selWords ) );
String msg = getString( R.string.paste_done_fmt,
selWords.length );
String msg = getQuantityString( R.plurals.paste_done_fmt,
selWords.length, selWords.length );
showToast( msg );
break;
default:

View file

@ -412,9 +412,10 @@ public class UpdateCheckReceiver extends BroadcastReceiver {
int nAdded = LocUtils.addXlations( m_context, data );
if ( 0 < nAdded ) {
gotOne = true;
String msg = LocUtils.getString( m_context, R.string
.new_xlations_fmt,
nAdded );
String msg =
LocUtils.getQuantityString( m_context, R.plurals
.new_xlations_fmt,
nAdded, nAdded );
Utils.showToast( m_context, msg );
}
}

View file

@ -53,13 +53,14 @@ public class LastMoveInfo {
result = LocUtils.getString( context, R.string.lmi_pass_fmt,
name );
} else {
result = LocUtils.getString( context, R.string.lmi_move_fmt,
name, word, score );
result = LocUtils.getQuantityString( context, R.plurals.lmi_move_fmt,
score, name, word, score );
}
break;
case TRADE_TYPE:
result = LocUtils.getString( context, R.string.lmi_trade_fmt,
name, nTiles );
result = LocUtils
.getQuantityString( context, R.plurals.lmi_trade_fmt,
nTiles, name, nTiles );
break;
case PHONY_TYPE:
result = LocUtils.getString( context, R.string.lmi_phony_fmt,

View file

@ -98,6 +98,7 @@ public interface UtilCtxt {
static final int STR_WINNER = 22;
String getUserString( int stringCode );
String getUserQuantityString( int stringCode, int quantity );
static final int QUERY_COMMIT_TURN = 0;
static final int QUERY_ROBOT_TRADE = 1;

View file

@ -146,9 +146,6 @@ public class UtilCtxtImpl implements UtilCtxt {
{
int id = 0;
switch( stringCode ) {
case UtilCtxt.STRD_ROBOT_TRADED:
id = R.string.strd_robot_traded_fmt;
break;
case UtilCtxt.STR_ROBOT_MOVED:
id = R.string.str_robot_moved_fmt;
break;
@ -200,12 +197,6 @@ public class UtilCtxtImpl implements UtilCtxt {
case UtilCtxt.STRD_TURN_SCORE:
id = R.string.strd_turn_score_fmt;
break;
case UtilCtxt.STRD_REMAINS_HEADER:
id = R.string.strd_remains_header_fmt;
break;
case UtilCtxt.STRD_REMAINS_EXPL:
id = R.string.strd_remains_expl_fmt;
break;
case UtilCtxt.STR_RESIGNED:
id = R.string.str_resigned;
break;
@ -217,12 +208,30 @@ public class UtilCtxtImpl implements UtilCtxt {
DbgUtils.logf( "no such stringCode: %d", stringCode );
}
String result;
if ( 0 == id ) {
result = "";
} else {
result = LocUtils.getString( m_context, id );
String result = (0 == id) ? "" : LocUtils.getString( m_context, id );
return result;
}
public String getUserQuantityString( int stringCode, int quantity )
{
int pluralsId = 0;
switch ( stringCode ) {
case UtilCtxt.STRD_ROBOT_TRADED:
pluralsId = R.plurals.strd_robot_traded_fmt;
break;
case UtilCtxt.STRD_REMAINS_HEADER:
pluralsId = R.plurals.strd_remains_header_fmt;
break;
case UtilCtxt.STRD_REMAINS_EXPL:
pluralsId = R.plurals.strd_remains_expl_fmt;
break;
}
String result = "";
if ( 0 != pluralsId ) {
result = LocUtils.getQuantityString( m_context, pluralsId, quantity );
}
DbgUtils.logf( "UtilCtxtImpl.getUserQuantityString() => %s", result );
return result;
}

View file

@ -225,6 +225,16 @@ public class LocUtils {
return result;
}
public static String getQuantityString( Context context, int id,
int quantity )
{
DbgUtils.logf( "getQuantityString(%d): punting on locutils stuff for"
+ " now. FIXME", quantity );
String result = context.getResources().getQuantityString( id, quantity );
DbgUtils.logf( "LocUtils.getQuantityString() => %s", result );
return result;
}
public static String getQuantityString( Context context, int id,
int quantity, Object... params )
{
@ -232,6 +242,7 @@ public class LocUtils {
+ " now. FIXME", quantity );
String result = context.getResources()
.getQuantityString( id, quantity, params );
DbgUtils.logf( "LocUtils.getQuantityString() => %s", result );
return result;
}

View file

@ -907,7 +907,8 @@ makeRobotMove( ServerCtxt* server )
if ( !!stream ) {
XP_UCHAR buf[64];
str = util_getUserString(util, STRD_ROBOT_TRADED);
str = util_getUserQuantityString( util, STRD_ROBOT_TRADED,
MAX_TRAY_TILES );
XP_SNPRINTF( buf, sizeof(buf), str, MAX_TRAY_TILES );
stream_catString( stream, buf );
@ -2138,8 +2139,9 @@ makeTradeReportIf( ServerCtxt* server, const TrayTileSet* tradedTiles )
XWStreamCtxt* stream = NULL;
if ( server->nv.showRobotScores ) {
XP_UCHAR tradeBuf[64];
const XP_UCHAR* tradeStr = util_getUserString( server->vol.util,
STRD_ROBOT_TRADED );
const XP_UCHAR* tradeStr =
util_getUserQuantityString( server->vol.util, STRD_ROBOT_TRADED,
tradedTiles->nTiles );
XP_SNPRINTF( tradeBuf, sizeof(tradeBuf), tradeStr,
tradedTiles->nTiles );
stream = mkServerStream( server );
@ -2971,8 +2973,9 @@ server_formatRemainingTiles( ServerCtxt* server, XWStreamCtxt* stream,
XP_ASSERT( !!server->vol.model );
const XP_UCHAR* fmt = util_getUserString( server->vol.util,
STRD_REMAINS_HEADER );
const XP_UCHAR* fmt = util_getUserQuantityString( server->vol.util,
STRD_REMAINS_HEADER,
nLeft );
XP_SNPRINTF( buf, sizeof(buf), fmt, nLeft );
stream_catString( stream, buf );
stream_catString( stream, "\n\n" );
@ -3010,7 +3013,8 @@ server_formatRemainingTiles( ServerCtxt* server, XWStreamCtxt* stream,
XP_ASSERT( offset < sizeof(cntsBuf) );
}
fmt = util_getUserString( server->vol.util, STRD_REMAINS_EXPL );
fmt = util_getUserQuantityString( server->vol.util, STRD_REMAINS_EXPL,
nLeft );
XP_SNPRINTF( buf, sizeof(buf), fmt, nLeft );
stream_catString( stream, buf );

View file

@ -161,6 +161,9 @@ typedef struct UtilVtable {
const XP_UCHAR* (*m_util_getUserString)( XW_UtilCtxt* uc,
XP_U16 stringCode );
const XP_UCHAR* (*m_util_getUserQuantityString)( XW_UtilCtxt* uc,
XP_U16 stringCode,
XP_U16 quantity );
XP_Bool (*m_util_warnIllegalWord)( XW_UtilCtxt* uc, BadWordInfo* bwi,
XP_U16 turn, XP_Bool turnLost );
@ -301,6 +304,8 @@ struct XW_UtilCtxt {
#define util_getUserString( uc, c ) \
(uc)->vtable->m_util_getUserString((uc),(c))
#define util_getUserQuantityString( uc, c, q ) \
(uc)->vtable->m_util_getUserQuantityString((uc),(c),(q))
#define util_warnIllegalWord( uc, w, p, b ) \
(uc)->vtable->m_util_warnIllegalWord((uc),(w),(p),(b))

View file

@ -339,6 +339,13 @@ linux_util_getUserString( XW_UtilCtxt* XP_UNUSED(uc), XP_U16 code )
}
} /* linux_util_getUserString */
static const XP_UCHAR*
linux_util_getUserQuantityString( XW_UtilCtxt* uc, XP_U16 code,
XP_U16 XP_UNUSED(quantity) )
{
return linux_util_getUserString( uc, code );
}
#ifdef XWFEATURE_DEVID
static const XP_UCHAR*
linux_util_getDevID( XW_UtilCtxt* uc, DevIDType* typ )
@ -409,6 +416,7 @@ linux_util_vt_init( MPFORMAL XW_UtilCtxt* util )
util->vtable->m_util_getSquareBonus = linux_util_getSquareBonus;
util->vtable->m_util_getCurSeconds = linux_util_getCurSeconds;
util->vtable->m_util_getUserString = linux_util_getUserString;
util->vtable->m_util_getUserQuantityString = linux_util_getUserQuantityString;
#ifdef XWFEATURE_DEVID
util->vtable->m_util_getDevID = linux_util_getDevID;
util->vtable->m_util_deviceRegistered = linux_util_deviceRegistered;