diff --git a/xwords4/android/XWords4/res/values-ca/strings.xml b/xwords4/android/XWords4/res/values-ca/strings.xml
new file mode 100644
index 000000000..ecc4ee1bc
--- /dev/null
+++ b/xwords4/android/XWords4/res/values-ca/strings.xml
@@ -0,0 +1,179 @@
+
+
+
+
+ Suprimeix
+ Afegeix una partida
+ Afegeix una partida
+ Reverteix
+ Descarta
+
+ Obre
+ Configura
+ Amaga
+ Suprimeix
+ Copia
+ Nova des de
+ Mou amunt
+ Mou avall
+ Mou amunt de tot
+ Mou avall de tot
+
+ Edita la nota
+ Edita el títol
+
+ Partida
+
+ Crea una partida
+ Edita la partida
+ Crosswords
+ Partida
+ Nom de la partida:
+
+ Crosswords
+
+ D\'acord
+ Cancel·la
+ Sí
+ No
+ Desa
+
+ Nom:
+ Obre
+ Fet
+
+ Error
+ FYI...
+ S\'ha produït un error en carregar la partida
+ Una pregunta...
+ Esteu segur de voler canviar les fitxes seleccionades?
+
+
+ Pick tile
+ Fitxes romanents
+ Quantitat i valor de les fitxes
+ Historial de la partida
+ Puntuacions finals
+
+
+ Torn fet
+ Remena
+ CAnvia l\'horientació
+ Canvia
+ Amaga/Mostra
+ Desfés
+ Desfés l\'actual
+ Desfés l\'últim
+ Pista
+ Pista següent
+ Pista
+ Mostra els valors
+ Partida
+ Quantitat i valors
+ Fitxes romanents
+ Informacio de la partida
+ Historial de la partida
+ Puntuacions finals
+ Reenvia els missatges
+ Fitxer
+ Partida nova
+ Preferències
+ Quant al Crosswords
+
+ Delete all
+ Partides amagades
+
+
+ El robot ha canviat %d fitxes en aquest torn.
+ El robot ha fet aquesta jugada:
+ %s quantitat/valors:
+ + %d [fitxes romanents]
+ - %d [fitxes al faristol]
+ El jugador remot ha fet aquest moviment:
+
+ - %d [temps]
+ mou (des de %s horitzontal)
+ mou (des de %s avall)
+ Faristol a l\'inici: %s
+ Ha canviat %s per %s.
+ Hi ha una o més paraules no vàlides a la jugada; torn perdut!
+ Puntuació acumulada: %d
+ Fitxes noves: %s
+ Ha passat
+
+ %s:%d
+ Torn perdut
+ Voleu fer la jugada?\n
+ %s
+ %s (remot)
+ Bonificació per usar totes les partides: 50\n
+ Puntuació del torn: %d\n
+
+
+ Heu de jugar les fitxes en una mateixa línia.
+ No podeu deixar caselles buides entre les fitxes jugades.
+ Heu de jugar dues o més fitxes en la primera jugada.
+ Les fitxes noves han de tocar alguna de les que ja estan jugades al tauler (o la casella central en la primera jugada).
+ No podeu fer això, no és el vostre torn!
+ No podeu mirar les fitxes del robot!
+ Recolliu les fitxes posades al tauler abans de canviar fitxer.
+ Hi ha poques fitxes al saquet i ja no podeu canviar-les.
+ L\'assignació de fitxers no es pot desfer.
+ Les pistes es troben inhabilitades per a aquesta partida. Habiliteu-les per a una partida nova al menú Preferències.
+ No podeu mirar a les fitxes dels jugadors remots!
+ S\'ha refusat l\'intent de registre d\'usuaris inesperats.
+ Hi ha un conflicte entre els diccionaris de l\'amfitrió i dels visitants; L\'amfitrió guanya.
+ Com a mínim un jugador ha de ser visitant per a una partida iniciada cm a amfitrió.
+
+ Jugador remot (ignorat)
+ Jugador robot
+ Contrasenya (ignorat)
+ Jugador
+
+ Jugadors
+ Afegeix un jugador
+
+ Remena les posicions de joc
+
+ Amunt
+ Avall
+
+ Diccionari
+ Rol
+ Paraules fora del diccionari
+
+ Baixa\'n més...
+
+ http://eehouse.org/and_dicts
+
+ Permet pistes
+ Habilita el temps
+ Fitxes de colors
+ Robot intel·ligent
+ Mostra la fletxa al tauler
+ Explica les jugades del robot
+ Omet la confirmació de la jugada
+ Amaga els valors
+
+ Solitari
+ Amfitrió
+ Visitant
+
+ Ignora-les
+ Avisa\'m
+ No es poden jugar
+ Preferències
+
diff --git a/xwords4/android/scripts/add_strings.sh b/xwords4/android/scripts/add_strings.sh
index a5cef5b4e..d41fb8145 100755
--- a/xwords4/android/scripts/add_strings.sh
+++ b/xwords4/android/scripts/add_strings.sh
@@ -1,17 +1,48 @@
#!/bin/sh
+LOCALES=values
+
check_add () {
STRING=$1
- PAT=".*"
- if ! grep -q "$PAT" res/values/strings.xml; then
- echo "$STRING"
- fi
+ for VALUES in $LOCALES; do
+ PAT=".*"
+ if [ ! -f "res/$VALUES/strings.xml" ]; then
+ echo "error: res/$VALUES/strings.xml not found" 1>&2
+ elif ! grep -q "$PAT" res/$VALUES/strings.xml; then
+ echo "$STRING"
+ fi
+ done
}
+usage() {
+ echo "usage: $0 [--locale ] [--all]" 1>&2
+}
BASE=$(dirname $0)
cd $BASE/../XWords4
+while [ -n "$1" ]; do
+ case $1 in
+ --all)
+ for DIR in $(ls -d res/values-*); do
+ DIR=$(basename $DIR)
+ LOCALES="$LOCALES $DIR"
+ done
+ ;;
+ --locale)
+ [ -n "$2" ] || usage
+ LOCALES="values-$2"
+ shift
+ ;;
+ *)
+ usage
+ ;;
+ esac
+ shift
+done
+
+echo "trying $LOCALES" 1>&2
+
for XML_FILE in $(find res/layout -name '*.xml'); do
for STRING in $(grep 'android:text=' $XML_FILE | sed 's,^.*"@string/\(.*\)".*$,\1,'); do
check_add $STRING