[gcompris] Multigraph support for gletters



commit 4a434e5f91f3b89521e03579451057cf35b0742b
Author: GunChleoc <fios foramnagaidhlig net>
Date:   Tue May 7 23:02:09 2013 +0100

    Multigraph support for gletters
    
    - letters are now defined in XML for flexible level design
    - moved the data over from the po files where alphabet had been localized, but localizers should still 
fine-tune
    
    - bugs that still need fixing:
    --- mode switching to mixed/uppercase -> load new wordlist!
    --- uppercase_only: second element of digraph has to be typed uppercase
    --- check hash compare again

 src/gletters-activity/gletters.c                   | 1115 +++++++++++---------
 .../resources/gletters/Makefile.am                 |   38 +-
 .../resources/gletters/default-ar.xml              |   87 ++
 .../resources/gletters/default-ast.xml             |  231 ++++
 .../resources/gletters/default-bg.xml              |  287 +++++
 .../resources/gletters/default-br.xml              |  259 +++++
 .../resources/gletters/default-ca.xml              |  263 +++++
 .../resources/gletters/default-cs.xml              |  375 +++++++
 .../resources/gletters/default-da.xml              |  279 +++++
 .../resources/gletters/default-de.xml              |  279 +++++
 .../resources/gletters/default-el.xml              |  239 +++++
 .../resources/gletters/default-en.xml              |  255 +++++
 .../resources/gletters/default-es.xml              |  263 +++++
 .../resources/gletters/default-et.xml              |  303 ++++++
 .../resources/gletters/default-fa.xml              |   99 ++
 .../resources/gletters/default-fi.xml              |  279 +++++
 .../resources/gletters/default-gd.xml              |  271 +++++
 .../resources/gletters/default-gl.xml              |  243 +++++
 .../resources/gletters/default-gu.xml              |   46 +
 .../resources/gletters/default-he.xml              |   83 ++
 .../resources/gletters/default-hu.xml              |  323 ++++++
 .../resources/gletters/default-ka.xml              |   97 ++
 .../resources/gletters/default-lt.xml              |  299 ++++++
 .../resources/gletters/default-lv.xml              |  311 ++++++
 .../resources/gletters/default-nn.xml              |  279 +++++
 .../resources/gletters/default-pl.xml              |  311 ++++++
 .../resources/gletters/default-ru.xml              |  287 +++++
 .../resources/gletters/default-sk.xml              |  391 +++++++
 .../resources/gletters/default-sl.xml              |  124 +++
 .../resources/gletters/default-so.xml              |  231 ++++
 .../resources/gletters/default-sr.xml              |  287 +++++
 .../resources/gletters/default-sr latin xml        |  347 ++++++
 .../resources/gletters/default-sv.xml              |  244 +++++
 .../resources/gletters/default-ta.xml              |   91 ++
 .../resources/gletters/default-uk.xml              |  311 ++++++
 .../resources/gletters/default-vi.xml              |  279 +++++
 .../resources/gletters/upper-en.xml                |  151 +++
 .../resources/gletters/upper-gd.xml                |  167 +++
 38 files changed, 9318 insertions(+), 506 deletions(-)
---
diff --git a/src/gletters-activity/gletters.c b/src/gletters-activity/gletters.c
index a6c6a01..226f193 100644
--- a/src/gletters-activity/gletters.c
+++ b/src/gletters-activity/gletters.c
@@ -19,18 +19,49 @@
 #include <string.h>
 
 #include "gcompris/gcompris.h"
+#include "gcompris/gameutil.h"
+
 
 #define SOUNDLISTFILE PACKAGE
-#define MAX_RAND_ATTEMPTS 5
+#define MAXWORDSLENGTH 50
+static GcomprisWordlist *gc_wordlist = NULL;
+
+#if GLIB_CHECK_VERSION(2, 31, 0)
+static GMutex items_lock; /* No init needed for static GMutexes */
+#else
+GStaticMutex items_lock = G_STATIC_MUTEX_INIT;
+#endif
+
+/*
+  word - letters/multigraph to type
+  overword - part of word already typed
+  count - number of already typed letters in word
+  pos - pointer to current position in word
+  letter - current expected letter to type
+*/
+typedef struct {
+  GooCanvasItem *rootitem;
+  GooCanvasItem *overwriteItem;
+  gchar *word;
+  gchar *overword;
+  gint  count;
+  gchar *pos;
+  gchar *letter;
+} LettersItem;
+
+/*
+  items - array of displayed items
+  items2del - array of items where moved offscreen
+  item_on_focus -  item on focus in array items. NULL - not set.
+*/
+
+static GPtrArray       *items=NULL;
+static GPtrArray       *items2del=NULL;
+static LettersItem     *item_on_focus=NULL;
 
-static GList *item_list = NULL;
-static GList *item2del_list = NULL;
-static guint actors_count = 0;
 
 static GcomprisBoard *gcomprisBoard = NULL;
 
-static gint dummy_id = 0;
-static gint drop_items_id = 0;
 
 /* Sublevels are now allocated dynamically
  * based on the number of chars at that level
@@ -47,9 +78,7 @@ static gint drop_items_id = 0;
  */
 
 #define FALL_RATE_BASE 40
-static float fallRateBase = FALL_RATE_BASE;
 #define FALL_RATE_MULT 100
-static float fallRateMult = FALL_RATE_MULT;
 
 /* these constants control how often letters are dropped
  * the base rate is fixed
@@ -57,72 +86,45 @@ static float fallRateMult = FALL_RATE_MULT;
  */
 
 #define DROP_RATE_BASE 1000
-static float dropRateBase = DROP_RATE_BASE;
 #define DROP_RATE_MULT 8000
-static float dropRateMult = DROP_RATE_MULT;
-
-/* both letters_array and keymap are read in
- * dynamically at run-time from files based on
- * user locale
- */
 
-/* letters_array contains letters you want shown
- * on each play level
- * there can be an arbitrary number of levels,
- * but there are only graphics to level 9
- * so that's where we stop
- */
-
-#define MAXLEVEL 10
-static int maxLevel;
-static char *letters_array[MAXLEVEL];
-
-/* keymap contains pairs of chars. The first char is
- * on the keyboard map, the second is the unichar that
- * is also represented by that key.  That way, if there is more
- * than one character represented by a key, the user doesn't
- * have to use alternate input methods.
- * It turns out that some keyboards generate long unichars,
- * so keymap has to be big enough for 2 unichars
- * both chars are packed into the same string; this makes it
- * easier to deal with.
- */
+static gint dummy_id = 0;
+static gint drop_items_id = 0;
+static gboolean uppercase_only;
 
-static int keyMapSize;
-static char **keyMap;
 
-/* Hash table of all displayed letters  */
+/* Hash table of all displayed letters, so each letter will be chosen at least once
+ * before uplicate letters are used  */
 static GHashTable *letters_table= NULL;
 
-static void start_board (GcomprisBoard *agcomprisBoard);
-static void pause_board (gboolean pause);
-static void end_board (void);
-static gboolean is_our_board (GcomprisBoard *gcomprisBoard);
-static void set_level (guint level);
-static gint key_press(guint keyval, gchar *commit_str, gchar *preedit_str);
-static void gletter_config_start(GcomprisBoard *agcomprisBoard,
+static void             start_board (GcomprisBoard *agcomprisBoard);
+static void             pause_board (gboolean pause);
+static void             end_board (void);
+static gboolean                 is_our_board (GcomprisBoard *gcomprisBoard);
+static void             set_level (guint level);
+static gint             key_press(guint keyval, gchar *commit_str, gchar *preedit_str);
+
+static GooCanvasItem    *gletters_create_item(GooCanvasItem *parent);
+static gint             gletters_drop_items (gpointer data);
+static gint             gletters_move_items (gpointer data);
+static void             gletters_destroy_item(LettersItem *item);
+static gboolean                 gletters_delete_items(gpointer user_data);
+static void             gletters_destroy_all_items(void);
+static void             gletters_next_level(void);
+static void             gletters_add_new_item(void);
+static void             gletters_config_start(GcomprisBoard *agcomprisBoard,
                                             GcomprisProfile *aProfile);
-static void gletter_config_stop(void);
-
-static GooCanvasItem *gletters_create_item(GooCanvasItem *parent);
-static gboolean gletters_drop_items (gpointer data);
-static gboolean gletters_move_items (gpointer data);
-static void gletters_destroy_item(GooCanvasItem *item);
-static void gletters_destroy_items(void);
-static void gletters_destroy_all_items(void);
-static void gletters_next_level(void);
-static void gletters_add_new_item(void);
-
-static void player_win(GooCanvasItem *item);
-static void player_loose(void);
-static GooCanvasItem *item_find_by_title (const gunichar *title);
-static gunichar *key_find_by_item (const GooCanvasItem *item);
+static void             gletters_config_stop(void);
+
+
+static void             player_win(LettersItem *item);
+static void             player_lose(void);
+
 
 static  guint32              fallSpeed = 0;
 static  double               speed = 0.0;
-static  int                 gamewon;
 
-static gboolean with_sound = FALSE;
+static GooCanvasItem *preedit_text = NULL;
 
 /* Description of this plugin */
 static BoardPlugin menu_bp =
@@ -145,8 +147,8 @@ static BoardPlugin menu_bp =
     set_level,
     NULL,
     NULL,
-    gletter_config_start,
-    gletter_config_stop
+    gletters_config_start,
+    gletters_config_stop
   };
 
 /*
@@ -161,25 +163,9 @@ GET_BPLUGIN_INFO(gletters)
  * in : boolean TRUE = PAUSE : FALSE = UNPAUSE
  *
  */
-
-static void level_set_score() {
-  int l;
-
-  g_message("letters_array length for level %d is %ld\n",
-           gcomprisBoard->level,
-           g_utf8_strlen(letters_array[gcomprisBoard->level-1],-1));
-  l = g_utf8_strlen(letters_array[gcomprisBoard->level-1],-1)/3;
-  gcomprisBoard->number_of_sublevel = (DEFAULT_SUBLEVEL>l?DEFAULT_SUBLEVEL:l);
-
-  gc_score_start(SCORESTYLE_NOTE,
-                      BOARDWIDTH - 195,
-                      BOARDHEIGHT - 30,
-                      gcomprisBoard->number_of_sublevel);
-  gc_bar_set(GC_BAR_CONFIG|GC_BAR_LEVEL);
-}
-
 static void pause_board (gboolean pause)
 {
+
   if(gcomprisBoard==NULL)
     return;
 
@@ -196,156 +182,106 @@ static void pause_board (gboolean pause)
     }
   else
     {
-      if(gamewon == TRUE) /* the game is won */
-       {
-         level_set_score();
-         gletters_next_level();
-       }
-
       if(!drop_items_id) {
-       drop_items_id = g_timeout_add (1000,
-                                      gletters_drop_items, NULL);
+       drop_items_id = g_timeout_add (0,
+                                      (GSourceFunc) gletters_drop_items, NULL);
       }
       if(!dummy_id) {
-       dummy_id = g_timeout_add (1000, gletters_move_items, NULL);
+       dummy_id = g_timeout_add (10, (GSourceFunc) gletters_move_items, NULL);
       }
     }
 }
 
-static gboolean uppercase_only;
-
-int load_default_charset() {
-  g_message("in load_default_charset\n");
-
-  gchar *numbers;
-  gchar *alphabet_lowercase;
-  gchar *alphabet_uppercase;
-
-  /* TRANSLATORS: Put here the numbers in your language */
-  numbers=_("0123456789");
-  g_assert(g_utf8_validate(numbers,-1,NULL)); // require by all utf8-functions
-
-  /* TRANSLATORS: Put here the alphabet lowercase in your language */
-  alphabet_lowercase=_("abcdefghijklmnopqrstuvwxyz");
-  g_assert(g_utf8_validate(alphabet_lowercase,-1,NULL)); // require by all utf8-functions
-
-  g_warning("Using lowercase %s", alphabet_lowercase);
-
-  /* TRANSLATORS: Put here the alphabet uppercase in your language */
-  alphabet_uppercase=_("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
-  g_assert(g_utf8_validate(alphabet_uppercase,-1,NULL)); // require by all utf8-functions
-  g_warning("Using uppercase %s", alphabet_uppercase);
-
-  letters_array[0] = g_strdup(alphabet_uppercase);
-  letters_array[1] = g_strdup_printf("%s%s",
-                                    alphabet_uppercase,
-                                    numbers);
-  if (!uppercase_only){
-  letters_array[2] = g_strdup(alphabet_lowercase);
-  letters_array[3] = g_strdup_printf("%s%s",
-                                    alphabet_lowercase,
-                                    numbers);
-  letters_array[4] = g_strdup_printf("%s%s",
-                                    alphabet_lowercase,
-                                    alphabet_uppercase);
-  letters_array[5] = g_strdup_printf("%s%s%s",
-                                    alphabet_lowercase,
-                                    alphabet_uppercase,
-                                    numbers);
-  } else{
-    g_warning("Uppercase only is set");
-      letters_array[2] = g_strdup(alphabet_uppercase);
-    letters_array[3] = g_strdup_printf("%s%s",
-                                      alphabet_uppercase,
-                                      numbers);
-    letters_array[4] = g_strdup_printf("%s%s",
-                                      alphabet_uppercase,
-                                      numbers);
-    letters_array[5] = g_strdup_printf("%s%s",
-                                      alphabet_uppercase,
-                                      numbers);
-  }
-
-
-  keyMapSize = 0;
-  maxLevel = 6;
-  return TRUE;
-}
-
-int whitespace(char *buffer) {
-  int i;
-  i = 0;
-  while(buffer[i] != '\0') {
-    if(buffer[i] == ' ' || buffer[i] == '\t' || buffer[i++] == '\n')
-      continue;
-    else return FALSE;
-  }
-  return TRUE;
-}
-
 /*
  */
 static void start_board (GcomprisBoard *agcomprisBoard)
 {
-  GHashTable *config = gc_db_get_board_conf();
 
-  gc_locale_set(g_hash_table_lookup( config, "locale"));
-
-  gchar *up_init_str = g_hash_table_lookup( config, "uppercase_only");
+  if(agcomprisBoard!=NULL)
+    {
+      gcomprisBoard=agcomprisBoard;
 
-  if (up_init_str && (strcmp(up_init_str, "True")==0))
-    uppercase_only = TRUE;
-  else
-    uppercase_only = FALSE;
+      GHashTable *config = gc_db_get_board_conf();
+      gc_locale_set(g_hash_table_lookup( config, "locale"));
 
-  gchar *control_sound = g_hash_table_lookup( config, "with_sound");
+      gchar *up_init_str = g_hash_table_lookup( config, "uppercase_only");
+      if (up_init_str && (strcmp(up_init_str, "True")==0))
+       uppercase_only = TRUE;
+      else
+       uppercase_only = FALSE;
 
-  if (control_sound && strcmp(g_hash_table_lookup( config, "with_sound"),"True")==0)
-    with_sound = TRUE;
-  else
-    with_sound = FALSE;
+      g_hash_table_destroy(config);
 
-  g_hash_table_destroy(config);
+      /* disable im_context */
+      //gcomprisBoard->disable_im_context = TRUE;
 
-  if(agcomprisBoard!=NULL)
-    {
-      gcomprisBoard=agcomprisBoard;
-      load_default_charset();
       gc_set_background(goo_canvas_get_root_item(gcomprisBoard->canvas),
                        "gletters/scenery_background.png");
-      gcomprisBoard->maxlevel=maxLevel;
+
+
       gcomprisBoard->level = 1;
-      level_set_score();
+      gcomprisBoard->maxlevel = 6;
+      gcomprisBoard->sublevel = 0;
+      gc_bar_set(GC_BAR_LEVEL|GC_BAR_CONFIG);
+
+      gchar *filename = (uppercase_only) ? "gletters/upper-$LOCALE.xml" : "gletters/default-$LOCALE.xml";
+
+      gc_wordlist = gc_wordlist_get_from_file(filename);
+
+      if(!gc_wordlist)
+        {
+          /* Fallback to english */
+          filename = (uppercase_only) ? "gletters/upper-en.xml" : "gletters/default-en.xml";
+          gc_wordlist = gc_wordlist_get_from_file(filename);
+
+          if(!gc_wordlist)
+            {
+              gcomprisBoard = NULL;
+              gc_dialog(_("Error: We can't find\na list of letters to play this game.\n"), gc_board_end);
+              return;
+            }
+        }
+      if(gc_wordlist)
+      {
+        gcomprisBoard->maxlevel = gc_wordlist->number_of_level;
+      }
       gletters_next_level();
-      gamewon = FALSE;
-      pause_board(FALSE);
     }
 }
 
-
-
 static void
 end_board ()
 {
-  int i;
+
   if(gcomprisBoard!=NULL)
     {
       pause_board(TRUE);
       gc_score_end();
+#if GLIB_CHECK_VERSION(2, 31, 0)
+      g_mutex_lock (&items_lock);
+#else
+      g_static_mutex_lock (&items_lock);
+#endif
       gletters_destroy_all_items();
-      g_message("freeing memory");
-      for (i = 0; i < maxLevel; i++)
-       g_free(letters_array[i]);
-
-      for (i = 0; i < keyMapSize; i++)
-       g_free(keyMap[i]);
+#if GLIB_CHECK_VERSION(2, 31, 0)
+      g_mutex_unlock (&items_lock);
+#else
+      g_static_mutex_unlock (&items_lock);
+#endif
+      if (preedit_text){
+       goo_canvas_item_remove(preedit_text);
+       preedit_text=NULL;
+      }
+      gc_im_reset();
+      gcomprisBoard = NULL;
 
-      g_free(keyMap);
+      if (gc_wordlist != NULL){
+       gc_wordlist_free(gc_wordlist);
+       gc_wordlist = NULL;
+      }
     }
 
   gc_locale_set( NULL );
-
-  gcomprisBoard = NULL;
 }
 
 static void
@@ -355,102 +291,186 @@ set_level (guint level)
   if(gcomprisBoard!=NULL)
     {
       gcomprisBoard->level=level;
-      level_set_score();
       gletters_next_level();
     }
 }
 
-/* Append in char_list one of the falling letter */
-static void add_char(char *key, char *value, char *char_list)
-{
-  strcat(char_list, key);
-}
-
-gboolean unichar_comp(gpointer key,
-                     gpointer value,
-                     gpointer user_data)
-{
-  gunichar *target = (gunichar *) user_data;
-  if (*((gunichar *)key) == *target)
-    return TRUE;
-
-  return FALSE;
-}
 
-gint is_falling_letter(gunichar  unichar)
+static gint key_press(guint keyval, gchar *commit_str, gchar *preedit_str)
 {
-  GooCanvasItem *item;
-
-  if ((item = g_hash_table_find(letters_table,
-                              unichar_comp,
-                               &unichar)))
-    {
-      player_win(item);
-      return TRUE;
-    }
-  return FALSE;
-}
-
-static gint key_press(guint keyval, gchar *commit_str, gchar *preedit_str) {
-  gint length_passed, i;
-  gunichar c;
-  gchar  list_of_letters[255];
+  gchar *letter;
+  gint i;
+  LettersItem *item;
   gchar *str;
+  gunichar unichar_letter;
+  gint retval = TRUE;
 
   if(!gcomprisBoard)
     return FALSE;
 
-  /* i suppose even numbers are passed through IM_context */
-  if ((commit_str == NULL) && (preedit_str == NULL))
-    return FALSE;
+  if (keyval){
+    g_warning("keyval %d", keyval);
+    return TRUE;
+  }
 
-  gchar *string_passed;
-  if (commit_str)
-    string_passed = commit_str;
-  else
-    string_passed = preedit_str;
 
-  str = g_strdup(string_passed);
+  if (preedit_str){
+    g_warning("preedit_str %s", preedit_str);
+    /* show the preedit string on bottom of the window */
+    GcomprisProperties *properties = gc_prop_get ();
+    gchar *text;
+    PangoAttrList *attrs;
+    gint cursor_pos;
+    gtk_im_context_get_preedit_string (properties->context,
+                                      &text,
+                                      &attrs,
+                                      &cursor_pos);
+
+    if (!preedit_text)
+      preedit_text = \
+       goo_canvas_text_new (goo_canvas_get_root_item(gcomprisBoard->canvas),
+                            "",
+                            BOARDWIDTH/2,
+                            BOARDHEIGHT - 100,
+                            -1,
+                            GTK_ANCHOR_N,
+                            "font", gc_skin_font_board_huge_bold,
+                            //"fill_color_rgba", 0xba00ffff,
+                            NULL);
+
+
+    g_object_set (preedit_text,
+                 "text", text,
+                 "attributes", attrs,
+                 NULL);
 
-  length_passed = g_utf8_strlen(string_passed, -1);
+    return TRUE;
 
-  for (i=0; i < length_passed; i++){
-    c = g_utf8_get_char (string_passed);
-    if (is_falling_letter(c)){
-      gc_im_reset();
-      return TRUE;
+  }
+
+  /* commit str */
+  g_warning("commit_str %s", commit_str);
+
+  str = commit_str;
+
+#if GLIB_CHECK_VERSION(2, 31, 0)
+  g_mutex_lock (&items_lock);
+#else
+  g_static_mutex_lock (&items_lock);
+#endif
+  for (i=0; i < g_utf8_strlen(commit_str,-1); i++){
+    unichar_letter = g_utf8_get_char(str);
+    str = g_utf8_next_char(str);
+    if(!g_unichar_isalnum (unichar_letter)){
+      player_lose();
+      retval = FALSE;
+      break;
     }
 
-    /* if uppercase_only is set we do not care about upper or lower case at all */
-    gint level_uppercase;
-    if (uppercase_only)
-      level_uppercase = 10;
-    else
-      level_uppercase = 3;
+    letter = g_new0(gchar,6);
+    g_unichar_to_utf8 (unichar_letter, letter);
+    
+    if(item_on_focus==NULL)
+      {
+       for (i=0;i<items->len;i++)
+         {
+           item=g_ptr_array_index(items,i);
+           g_assert (item!=NULL);
+                
+            /* Force entered letter to the casing we expect
+             * Children is to small to manage the caps lock key for now
+             */
+            int success=FALSE;
+            if (uppercase_only)
+            {
+                gchar *old = letter;
+                letter = g_utf8_strup(old, -1);
+                g_free(old);
+                success = strcmp(item->letter,g_utf8_strdown(letter,-1))==0;
+                success = success || strcmp(item->letter,g_utf8_strup(letter,-1))==0;
+            }
+            else
+            {
+                success = strcmp(item->letter,letter)==0;
+            }
+            if (success)
+             {
+               item_on_focus=item;
+               break;
+             }
+         }
+      }
 
-    /* for 2 (or all) first level don't care abour uppercase/lowercase */
-    if ((gcomprisBoard->level < level_uppercase) &&
-       (is_falling_letter(g_unichar_toupper(c)))){
-      gc_im_reset();
-      return TRUE;
-    }
 
-    string_passed = g_utf8_next_char (string_passed);
-  }
+    if(item_on_focus!=NULL)
+      {
 
-  list_of_letters[0] = '\0';
+       if(strcmp(item_on_focus->letter, letter)==0)
+         {
+           gchar *tmpstr;
+           item_on_focus->count++;
+           g_free(item_on_focus->overword);
+           tmpstr = g_utf8_strndup(item_on_focus->word,
+                                   item_on_focus->count);
+           /* Add the ZERO WIDTH JOINER to force joined char in Arabic and Hangul
+            *  http://en.wikipedia.org/wiki/Zero-width_joiner
+            */
+           item_on_focus->overword = g_strdup_printf("%s%lc", tmpstr, 0x200D);
+           g_free(tmpstr);
+           g_object_set (item_on_focus->overwriteItem,
+                         "text", item_on_focus->overword,
+                         NULL);
 
-  /* We have to loop to concat the letters */
-  g_hash_table_foreach (letters_table,
-                       (GHFunc) add_char,
-                       list_of_letters);
 
-  /* Log what happened, what was expected, what we got */
+           if (item_on_focus->count<g_utf8_strlen(item_on_focus->word,-1))
+             {
+               g_free(item_on_focus->letter);
+               item_on_focus->letter=g_utf8_strndup(item_on_focus->pos,1);
+               item_on_focus->pos=g_utf8_find_next_char(item_on_focus->pos,NULL);
+             }
+           else
+             {
+               player_win(item_on_focus);
+               item_on_focus=NULL;
+             }
+         }
+       else
+         {
+           /* It is a lose : unselect the word and defocus */
+           g_free(item_on_focus->overword);
+           item_on_focus->overword=g_strdup(" ");
+           item_on_focus->count=0;
+           g_free(item_on_focus->letter);
+           item_on_focus->letter=g_utf8_strndup(item_on_focus->word,1);
+
+           item_on_focus->pos=g_utf8_find_next_char(item_on_focus->word,NULL);
+
+           g_object_set (item_on_focus->overwriteItem,
+                         "text", item_on_focus->overword,
+                         NULL);
+           item_on_focus=NULL;
+           g_free(letter);
+           player_lose();
+           break;
+         }
+      }
+    else
+      {
+       /* Anyway kid you clicked on the wrong key */
+       player_lose();
+       g_free(letter);
+       break;
+      }
 
-  gc_log_set_comment(gcomprisBoard, list_of_letters, str);
-  g_free(str);
+    g_free(letter);
+  }
+#if GLIB_CHECK_VERSION(2, 31, 0)
+  g_mutex_unlock (&items_lock);
+#else
+  g_static_mutex_unlock (&items_lock);
+#endif
 
-  return TRUE;
+  return retval;
 }
 
 static gboolean
@@ -475,295 +495,407 @@ is_our_board (GcomprisBoard *gcomprisBoard)
 /*-------------------------------------------------------------------------------*/
 /*-------------------------------------------------------------------------------*/
 
-/* set initial values for the next level */
-static void gletters_next_level()
+/* Called with items_lock locked */
+static void gletters_next_level_unlocked()
 {
+  int l;
+
+  // get number of letters available
+  l=g_slist_length(gc_wordlist_get_levelwordlist(gc_wordlist, gcomprisBoard->level)->words);
+
+  g_message("wordlist length for level %d is %d\n",
+           gcomprisBoard->level,
+           l);
+  l = l/3; // make sure the level doesn't get too long
+  // set sublevels
+  gcomprisBoard->number_of_sublevel = (DEFAULT_SUBLEVEL>l?DEFAULT_SUBLEVEL:l);
+
+  gc_score_start(SCORESTYLE_NOTE,
+                BOARDWIDTH - 195,
+                BOARDHEIGHT - 30,
+                gcomprisBoard->number_of_sublevel);
 
-  gamewon = FALSE;
   gc_bar_set_level(gcomprisBoard);
+  gc_score_set(gcomprisBoard->sublevel);
 
   gletters_destroy_all_items();
 
-  /* Try the next level */
-  speed=fallRateBase+(fallRateMult/gcomprisBoard->level);
-  fallSpeed=dropRateBase+(dropRateMult/gcomprisBoard->level);
+  if (preedit_text){
+    goo_canvas_item_remove(preedit_text);
+    preedit_text=NULL;
+  }
+  gc_im_reset();
 
-  gcomprisBoard->sublevel=1;
-  gc_score_set(gcomprisBoard->sublevel);
+  items=g_ptr_array_new();
+  items2del=g_ptr_array_new();
+  
+  /* Delete the letters_table */
+  if(letters_table) {
+    g_hash_table_destroy (letters_table);
+    letters_table=NULL;
+  }
+
+  pause_board(FALSE);
 }
 
+/* set initial values for the next level */
+static void gletters_next_level()
+{
+#if GLIB_CHECK_VERSION(2, 31, 0)
+  g_mutex_lock (&items_lock);
+#else
+  g_static_mutex_lock (&items_lock);
+#endif
+  gletters_next_level_unlocked();
+#if GLIB_CHECK_VERSION(2, 31, 0)
+  g_mutex_unlock (&items_lock);
+#else
+  g_static_mutex_unlock (&items_lock);
+#endif
+  speed= ((double) FALL_RATE_BASE)+(((double) FALL_RATE_MULT)/gcomprisBoard->level);
+  fallSpeed= (guint32) DROP_RATE_BASE+(DROP_RATE_MULT/gcomprisBoard->level);
+}
 
-static void gletters_move_item(GooCanvasItem *item)
+/* Called with items_lock locked */
+static void gletters_move_item(LettersItem *item)
 {
   GooCanvasBounds bounds;
 
-  goo_canvas_item_translate(item, 0, 2.0);
 
-  goo_canvas_item_get_bounds (item,
+  goo_canvas_item_translate(item->rootitem, 0, 2.0);
+
+  goo_canvas_item_get_bounds (item->rootitem,
                              &bounds);
 
   if(bounds.y1>BOARDHEIGHT) {
-    item2del_list = g_list_append (item2del_list, item);
-    player_loose();
+
+    if (item == item_on_focus)
+      item_on_focus = NULL;
+
+    g_ptr_array_remove (items, item);
+    g_ptr_array_add (items2del, item);
+    g_timeout_add (100,(GSourceFunc) gletters_delete_items, NULL);
+
+    player_lose();
   }
 }
 
-static void gletters_destroy_item(GooCanvasItem *item)
+/*
+ * This does the moves of the game items on the play canvas
+ *
+ */
+static gint gletters_move_items (gpointer data)
 {
-  gunichar *key;
-
-  key = key_find_by_item(item);
+  g_assert (items!=NULL);
+  gint i;
+  LettersItem *item;
+
+#if GLIB_CHECK_VERSION(2, 31, 0)
+  g_mutex_lock (&items_lock);
+#else
+  g_static_mutex_lock (&items_lock);
+#endif
+  for (i=items->len-1;i>=0;i--)
+    {
+      item=g_ptr_array_index(items,i);
+      gletters_move_item(item);
+    }
+#if GLIB_CHECK_VERSION(2, 31, 0)
+  g_mutex_unlock (&items_lock);
+#else
+  g_static_mutex_unlock (&items_lock);
+#endif
+  dummy_id = g_timeout_add (gc_timing (speed, items->len),
+          (GSourceFunc) gletters_move_items, NULL);
+  return (FALSE);
+}
 
-  item_list = g_list_remove (item_list, item);
-  --actors_count;
 
-  item2del_list = g_list_remove (item2del_list, item);
 
-  /* Remove old letter; this destroy the canvas item  */
-  g_hash_table_remove (letters_table, key);
+static void gletters_destroy_item(LettersItem *item)
+{
 
+  /* The items are freed by player_win */
+  goo_canvas_item_remove(item->rootitem);
+  g_free(item->word);
+  g_free(item->overword);
+  g_free(item->letter);
+  g_free(item);
 }
 
 /* Destroy items that falls out of the canvas */
-static void gletters_destroy_items()
+static gboolean gletters_delete_items(gpointer user_data)
 {
-  GooCanvasItem *item;
+  LettersItem *item;
+
+#if GLIB_CHECK_VERSION(2, 31, 0)
+  g_mutex_lock (&items_lock);
+#else
+  g_static_mutex_lock (&items_lock);
+#endif
+  /* items2del may be NULL, as we can get called after
+     gletters_destroy_all_items() has been called (since we get called
+     as a timeout handler). */
+  if (items2del!=NULL){
+    while (items2del->len>0)
+      {
+        item = g_ptr_array_index(items2del,0);
+        g_ptr_array_remove_index_fast(items2del,0);
+        gletters_destroy_item(item);
+      }
+  }
+#if GLIB_CHECK_VERSION(2, 31, 0)
+  g_mutex_unlock (&items_lock);
+#else
+  g_static_mutex_unlock (&items_lock);
+#endif
 
-  while(g_list_length(item2del_list)>0)
-    {
-      item = g_list_nth_data(item2del_list, 0);
-      gletters_destroy_item(item);
-    }
+  return (FALSE);
 }
 
-/* Destroy all the items */
+/* Destroy all the items, called with items_lock locked */
 static void gletters_destroy_all_items()
 {
-  GooCanvasItem *item;
+  LettersItem *item;
 
-  if(item_list)
-    while(g_list_length(item_list)>0)
+  if (items!=NULL){
+    while (items->len>0)
       {
-       item = g_list_nth_data(item_list, 0);
-       gletters_destroy_item(item);
+        item = g_ptr_array_index(items,0);
+        g_ptr_array_remove_index_fast(items,0);
+        gletters_destroy_item(item);
       }
+    g_ptr_array_free (items, TRUE);
+    items=NULL;
+  }
 
-   actors_count= 0;
-
+  if (items2del!=NULL){
+    while (items2del->len>0)
+      {
+        item = g_ptr_array_index(items2del,0);
+        g_ptr_array_remove_index_fast(items2del,0);
+        gletters_destroy_item(item);
+      }
+    g_ptr_array_free (items2del, TRUE);
+    items2del=NULL;
+  }
+  
   /* Delete the letters_table */
   if(letters_table) {
     g_hash_table_destroy (letters_table);
     letters_table=NULL;
   }
+
 }
 
 /*
- * This does the moves of the game items on the play canvas
- *
+ * Comparison function to see if a letter has already been used in the current level
  */
-static gboolean gletters_move_items (gpointer data)
+static gboolean comp_gchar_for_hash(gpointer key, gpointer value, gpointer user_data)
 {
-  g_list_foreach (item_list, (GFunc) gletters_move_item, NULL);
-
-  /* Destroy items that falls out of the canvas */
-  gletters_destroy_items();
-
-  dummy_id = g_timeout_add (gc_timing (speed, actors_count),
-                           gletters_move_items, NULL);
-
-  return(FALSE);
+  gchar *target = (gchar *) user_data;
+  const gchar *compvalue = (gchar *) key;
+  
+  return (g_strcmp0(compvalue, target)==0);
 }
 
 
-void destroy_canvas_item(gpointer item)
-{
-  //g_free(g_object_get_data (G_OBJECT(item),"unichar_key"));
-  //g_free(g_object_get_data (G_OBJECT(item),"utf8_key"));
-  goo_canvas_item_remove(item);
-}
-
 static GooCanvasItem *gletters_create_item(GooCanvasItem *parent)
 {
-  GooCanvasItem *item;
-  gint i,j,k;
-  guint x;
-  gunichar *lettersItem;
-  gchar *str_p, *letter;
-
+  g_message("Createing new item");
+  LettersItem *item;
+  gchar *word = gc_wordlist_random_word_get(gc_wordlist, gcomprisBoard->level);
+  GtkAnchorType direction_anchor = GTK_ANCHOR_NW;
+  
   if (!letters_table)
     {
-      letters_table = g_hash_table_new_full (g_int_hash, g_int_equal, g_free, destroy_canvas_item);
+      letters_table = g_hash_table_new(g_int_hash, g_str_equal);
     }
-
-  /* Beware, since we put the letters in a hash table, we do not allow the same
-   * letter to be displayed two times
-   */
-
-  g_warning("dump: %d, %s\n",gcomprisBoard->level,letters_array[gcomprisBoard->level-1]);
-
-  k = g_utf8_strlen(letters_array[gcomprisBoard->level-1],-1);
-
-  lettersItem = g_new(gunichar,1);
-  gint attempt=0;
-  do
-    {
-      attempt++;
-      str_p = letters_array[gcomprisBoard->level-1];
-      i = g_random_int_range(0,k);
-
-      for(j = 0; j < i; j++)
-       {
-         str_p=g_utf8_next_char(str_p);
-       }
-
-      *lettersItem = g_utf8_get_char (str_p);
-
-    } while((attempt<MAX_RAND_ATTEMPTS) && (item_find_by_title(lettersItem)!=NULL));
-
-  if (item_find_by_title(lettersItem)!=NULL)
+  
+  guint i;
+  if(word)
+  {
+      // Can't get hashtable lookup to work, so I have to use thee less efficient find
+      for (i=0;i<6 && word && g_hash_table_find(letters_table,comp_gchar_for_hash,word);++i)
+      {
+          word = gc_wordlist_random_word_get(gc_wordlist, gcomprisBoard->level);
+      }
+        /* Add letter to hash table of all falling letters. */
+        gchar *temp = word;
+        word = g_strdup(temp);
+        g_hash_table_insert (letters_table, word, word);
+        g_free(temp);
+  }
+  
+  else
+    /* Should display the dialog box here */
+    return NULL;
+    
+  // create and init item
+  item = g_new(LettersItem,1);
+  
+  if (uppercase_only)
     {
-      g_free(lettersItem);
-      return NULL;
+      gchar *old = word;
+      word = g_utf8_strup(old, -1);
+      g_free(old);
     }
 
-  letter = g_new0(gchar, 6);
-  g_unichar_to_utf8 ( *lettersItem, letter);
+  item->word = word;
+  item->overword=g_strdup("");
+  item->count=0;
+  item->letter=g_utf8_strndup(item->word,1);
+  item->pos=g_utf8_find_next_char(item->word,NULL);
+
+  if (pango_unichar_direction(g_utf8_get_char(item->word)))
+    direction_anchor = GTK_ANCHOR_NE;
+
+  item->rootitem = goo_canvas_group_new (parent, NULL);
+  goo_canvas_item_translate(item->rootitem, 0, -12);
+
+
+  /* To 'erase' words, I create 2 times the text item. One is empty now */
+  /* It will be filled each time the user enters the right key         */
+  goo_canvas_text_new (item->rootitem,
+                        item->word,
+                        (double) 0,
+                        (double) 0,
+                        -1,
+                        direction_anchor,
+                        "font", gc_skin_font_board_huge_bold,
+                        "fill_color_rgba", 0x3e2587FF,
+                        NULL);
+
+  item->overwriteItem = \
+    goo_canvas_text_new (item->rootitem,
+                        item->overword,
+                        (double) 0,
+                        (double) 0,
+                        -1,
+                        direction_anchor,
+                        "font", gc_skin_font_board_huge_bold,
+                        "fill-color_rgba", 0xff0000ff,
+                        NULL);
+
+  /*set right x position */
 
-  if (with_sound)
-    {
-      gchar *str2 = NULL;
-      gchar *letter_unichar_name = gc_sound_alphabet(letter);
-
-      str2 = g_strdup_printf("voices/$LOCALE/alphabet/%s", letter_unichar_name);
+  GooCanvasBounds bounds;
 
-      gc_sound_play_ogg(str2, NULL);
+  goo_canvas_item_get_bounds    (item->rootitem,
+                                &bounds);
 
-      g_free(letter_unichar_name);
-      g_free(str2);
-    }
-
-  item = \
-    goo_canvas_group_new (parent,
-                         NULL);
-  goo_canvas_item_translate(item, 0, -12);
-
-  x = g_random_int_range( 80, BOARDWIDTH-160);
-  goo_canvas_text_new (item,
-                      letter,
-                      x,
-                      -20,
-                      -1,
-                      GTK_ANCHOR_CENTER,
-                      "font", gc_skin_font_board_huge_bold,
-                      "fill_color_rgba", 0x8c8cFFFF,
-                      NULL);
-  x -= 2;
-  goo_canvas_text_new (item,
-                      letter,
-                      x,
-                      -22,
-                      -1,
-                      GTK_ANCHOR_CENTER,
-                      "font", gc_skin_font_board_huge_bold,
-                      "fill_color_rgba", 0x254c87FF,
-                      NULL);
-
-  g_object_set_data (G_OBJECT(item), "unichar_key", lettersItem);
-  g_object_set_data (G_OBJECT(item), "utf8_key", letter);
-
-  item_list = g_list_append (item_list, item);
-  ++actors_count;
-
-  /* Add letter to hash table of all falling letters. */
-  g_hash_table_insert (letters_table, lettersItem, item);
-
-  g_free(letter);
-
-  return (item);
+ if(direction_anchor == GTK_ANCHOR_NW)
+   goo_canvas_item_translate (item->rootitem,
+                             (g_random_int()%(BOARDWIDTH-(gint)(bounds.x2))),
+                             0);
+  else
+   {
+      double new_x = (double)( g_random_int()%BOARDWIDTH);
+      if ( new_x < -bounds.x1 )
+       new_x -=  bounds.x1;
+      goo_canvas_item_translate (item->rootitem,
+                                new_x ,(double) 0);
+   }
+
+
+    #if GLIB_CHECK_VERSION(2, 31, 0)
+      g_mutex_lock (&items_lock);
+    #else
+      g_static_mutex_lock (&items_lock);
+    #endif
+      g_ptr_array_add(items, item);
+    #if GLIB_CHECK_VERSION(2, 31, 0)
+      g_mutex_unlock (&items_lock);
+    #else
+      g_static_mutex_unlock (&items_lock);
+    #endif
+
+  return (item->rootitem);
 }
 
 static void gletters_add_new_item()
 {
+
+  g_assert(gcomprisBoard->canvas!=NULL);
   gletters_create_item(goo_canvas_get_root_item(gcomprisBoard->canvas));
+
 }
 
 /*
  * This is called on a low frequency and is used to drop new items
  *
  */
-static gboolean gletters_drop_items (gpointer data)
+static gint gletters_drop_items (gpointer data)
 {
   gc_sound_play_ogg ("sounds/level.wav", NULL);
   gletters_add_new_item();
+  g_source_remove(drop_items_id);
+  drop_items_id = g_timeout_add (fallSpeed,(GSourceFunc) gletters_drop_items, NULL);
 
-  drop_items_id = g_timeout_add (fallSpeed,
-                                gletters_drop_items, NULL);
   return (FALSE);
 }
 
-static void player_win(GooCanvasItem *item)
+/* Called with items_lock locked */
+static void player_win(LettersItem *item)
 {
-  gletters_destroy_item(item);
+
   gc_sound_play_ogg ("sounds/flip.wav", NULL);
 
+  g_assert(gcomprisBoard!=NULL);
+
   gcomprisBoard->sublevel++;
+  gc_score_set(gcomprisBoard->sublevel);
+
+  g_ptr_array_remove(items,item);
+  g_ptr_array_add(items2del,item);
+
+  g_object_set (item->rootitem, "visibility", GOO_CANVAS_ITEM_INVISIBLE, NULL);
+  g_timeout_add (500,(GSourceFunc) gletters_delete_items, NULL);
 
   if(gcomprisBoard->sublevel > gcomprisBoard->number_of_sublevel)
     {
+
       /* Try the next level */
       gcomprisBoard->level++;
+      gcomprisBoard->sublevel = 0;
       if(gcomprisBoard->level>gcomprisBoard->maxlevel)
        gcomprisBoard->level = gcomprisBoard->maxlevel;
 
-      gamewon = TRUE;
-      gletters_destroy_all_items();
-      gc_bonus_display(gamewon, GC_BONUS_SMILEY);
+      gletters_next_level_unlocked();
+      gc_sound_play_ogg ("sounds/bonus.wav", NULL);
     }
   else
     {
-      gc_score_set(gcomprisBoard->sublevel);
 
       /* Drop a new item now to speed up the game */
-      if(g_list_length(item_list)==0)
-       {
-         if (drop_items_id) {
-           /* Remove pending new item creation to sync the falls */
-           g_source_remove (drop_items_id);
-           drop_items_id = 0;
-         }
-         if(!drop_items_id) {
-           drop_items_id = g_timeout_add (0,
-                                          gletters_drop_items, NULL);
-         }
-       }
+      if(items->len==0)
+        {
+          if (drop_items_id) {
+            /* Remove pending new item creation to sync the falls */
+            g_source_remove (drop_items_id);
+            drop_items_id = 0;
+          }
+
+          if(!drop_items_id) {
+            drop_items_id = g_timeout_add (0,
+                                          (GSourceFunc) gletters_drop_items,
+                                          NULL);
+          }
+
+        }
     }
-}
 
-static void player_loose()
-{
-  gc_sound_play_ogg ("sounds/crash.wav", NULL);
-}
-
-static gunichar *
-key_find_by_item (const GooCanvasItem *item)
-{
-  return g_object_get_data (G_OBJECT(item), "unichar_key");
 }
 
-static GooCanvasItem *
-item_find_by_title (const gunichar *title)
+static void player_lose()
 {
-  if (!letters_table)
-    return NULL;
-
-  return g_hash_table_lookup (letters_table, title);
+  gc_sound_play_ogg ("sounds/crash.wav", NULL);
 }
 
+/* ************************************* */
+/* *            Configuration          * */
+/* ************************************* */
 
-/***********************************
-************************************
-    Config
-************************************/
 
 /* ======================= */
 /* = config_start        = */
@@ -771,7 +903,6 @@ item_find_by_title (const gunichar *title)
 
 static GcomprisProfile *profile_conf;
 static GcomprisBoard   *board_conf;
-
 static void save_table (gpointer key,
                        gpointer value,
                        gpointer user_data)
@@ -782,9 +913,8 @@ static void save_table (gpointer key,
                            (gchar *) value);
 }
 
-/* a GcomprisConfCallback
- */
-static gboolean conf_ok(GHashTable *table)
+static gboolean
+conf_ok(GHashTable *table)
 {
   if (!table){
     if (gcomprisBoard)
@@ -792,7 +922,7 @@ static gboolean conf_ok(GHashTable *table)
     return TRUE;
   }
 
-  g_hash_table_foreach(table, save_table, NULL);
+  g_hash_table_foreach(table, (GHFunc) save_table, NULL);
 
   if (gcomprisBoard){
     GHashTable *config;
@@ -805,29 +935,20 @@ static gboolean conf_ok(GHashTable *table)
     gc_locale_set(g_hash_table_lookup( config, "locale"));
 
     gchar *up_init_str = g_hash_table_lookup( config, "uppercase_only");
-
-    if (up_init_str && (strcmp(up_init_str, "True")==0))
-      uppercase_only = TRUE;
-    else
-      uppercase_only = FALSE;
-
-    gchar *control_sound = g_hash_table_lookup( config, "with_sound");
-
-    if (control_sound && strcmp(g_hash_table_lookup( config, "with_sound"),"True")==0)
-      with_sound = TRUE;
-    else
-      with_sound = FALSE;
+    if (up_init_str)
+      {
+       if(strcmp(up_init_str, "True")==0)
+         uppercase_only = TRUE;
+       else
+         uppercase_only = FALSE;
+      }
 
     if (profile_conf)
       g_hash_table_destroy(config);
 
-    load_default_charset();
-
-    level_set_score();
     gletters_next_level();
 
     pause_board(FALSE);
-
   }
 
   board_conf = NULL;
@@ -836,21 +957,22 @@ static gboolean conf_ok(GHashTable *table)
 }
 
 static void
-gletter_config_start(GcomprisBoard *agcomprisBoard,
-                   GcomprisProfile *aProfile)
+gletters_config_start(GcomprisBoard *agcomprisBoard,
+                      GcomprisProfile *aProfile)
 {
+  GcomprisBoardConf *conf;
   board_conf = agcomprisBoard;
   profile_conf = aProfile;
 
-  gchar *label;
-
   if (gcomprisBoard)
     pause_board(TRUE);
 
-  label = g_strdup_printf(_("<b>%s</b> configuration\n for profile <b>%s</b>"),
-                         agcomprisBoard->name, aProfile ? aProfile->name : "");
+  gchar *label = g_strdup_printf(_("<b>%s</b> configuration\n for profile <b>%s</b>"),
+                                agcomprisBoard->name,
+                                aProfile? aProfile->name: "");
 
-  GcomprisBoardConf *bconf = gc_board_config_window_display(label, (GcomprisConfCallback )conf_ok);
+  conf = gc_board_config_window_display( label,
+                                        conf_ok);
 
   g_free(label);
 
@@ -859,38 +981,21 @@ gletter_config_start(GcomprisBoard *agcomprisBoard,
 
   gchar *locale = g_hash_table_lookup( config, "locale");
 
-  gc_board_config_combo_locales( bconf, locale);
-
+  gc_board_config_combo_locales(conf, locale);
+  gc_board_config_wordlist(conf, "gletters/default-$LOCALE.xml");
+  /* upper case */
   gboolean up_init = FALSE;
-
   gchar *up_init_str = g_hash_table_lookup( config, "uppercase_only");
 
   if (up_init_str && (strcmp(up_init_str, "True")==0))
     up_init = TRUE;
 
-  gc_board_conf_separator(bconf);
-
-  gchar *control_sound = g_hash_table_lookup( config, "with_sound");
-  if (control_sound && strcmp(g_hash_table_lookup( config, "with_sound"),"True")==0)
-    with_sound = TRUE;
-  else
-    with_sound = FALSE;
-
-  gc_board_config_boolean_box(bconf, _("Enable sounds"), "with_sound", with_sound);
-
-  gc_board_conf_separator(bconf);
-
-  gc_board_config_boolean_box(bconf, _("Uppercase only text"),
-                      "uppercase_only",
-                      up_init);
-
+  gc_board_config_boolean_box(conf, _("Uppercase only text"),
+                             "uppercase_only",
+                             up_init);
 }
 
-
-/* ======================= */
-/* = config_stop        = */
-/* ======================= */
-static void
-gletter_config_stop()
+static void gletters_config_stop(void)
 {
 }
+
diff --git a/src/gletters-activity/resources/gletters/Makefile.am 
b/src/gletters-activity/resources/gletters/Makefile.am
index 62b2b72..4bb7337 100644
--- a/src/gletters-activity/resources/gletters/Makefile.am
+++ b/src/gletters-activity/resources/gletters/Makefile.am
@@ -1,5 +1,41 @@
 imgdir = $(pkgdatadir)/@PACKAGE_DATA_DIR@/gletters
 img_DATA = \
-       scenery_background.png
+       scenery_background.png \
+       default-en.xml \
+       upper-en.xml \
+       default-ar.xml \
+       default-ast.xml \
+       default-bg.xml \
+       default-br.xml \
+       default-ca.xml \
+       default-cs.xml \
+       default-da.xml \
+       default-de.xml \
+       default-el.xml \
+       default-es.xml \
+       default-et.xml \
+       default-fa.xml \
+       default-fi.xml \
+       default-gd.xml \
+       upper-gd.xml \
+       default-gl.xml \
+       default-gu.xml \
+       default-he.xml \
+       default-hu.xml \
+       default-ka.xml \
+       default-lt.xml \
+       default-lv.xml \
+       default-nn.xml \
+       default-pl.xml \
+       default-ru.xml \
+       default-sk.xml \
+       default-sl.xml \
+       default-so.xml \
+       default-sr.xml \
+       default-sr latin xml \
+       default-sv.xml \
+       default-ta.xml \
+       default-uk.xml \
+       default-vi.xml
 
 EXTRA_DIST = $(img_DATA)
diff --git a/src/gletters-activity/resources/gletters/default-ar.xml 
b/src/gletters-activity/resources/gletters/default-ar.xml
new file mode 100644
index 0000000..5e35e87
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-ar.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-ar" description="Arabic" locale="ar">
+<level value="1">
+٠
+١
+٢
+٣
+٤
+٥
+٦
+٧
+٨
+٩
+</level>
+<level value="2">
+ا
+ب
+ت
+ث
+ج
+ح
+خ
+د
+ذ
+ر
+ز
+س
+ش
+ص
+ض
+ط
+ظ
+ع
+غ
+ف
+ق
+ك
+ل
+م
+ن
+ه
+و
+ي
+</level>
+<level value="3">
+ا
+ب
+ت
+ث
+ج
+ح
+خ
+د
+ذ
+ر
+ز
+س
+ش
+ص
+ض
+ط
+ظ
+ع
+غ
+ف
+ق
+ك
+ل
+م
+ن
+ه
+و
+ي
+٠
+١
+٢
+٣
+٤
+٥
+٦
+٧
+٨
+٩
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-ast.xml 
b/src/gletters-activity/resources/gletters/default-ast.xml
new file mode 100644
index 0000000..41b55f3
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-ast.xml
@@ -0,0 +1,231 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-ast" description="Default Asturian" locale="ast">
+<level value="1">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+x
+y
+z
+</level>
+<level value="2">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+x
+y
+z
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="3">
+A
+B
+C
+D
+E
+F
+G
+H
+I
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+X
+Y
+Z
+</level>
+<level value="4">
+A
+B
+C
+D
+E
+F
+G
+H
+I
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+X
+Y
+Z
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="5">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+x
+y
+z
+A
+B
+C
+D
+E
+F
+G
+H
+I
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+X
+Y
+Z
+</level>
+<level value="6">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+x
+y
+z
+A
+B
+C
+D
+E
+F
+G
+H
+I
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+X
+Y
+Z
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-bg.xml 
b/src/gletters-activity/resources/gletters/default-bg.xml
new file mode 100644
index 0000000..6b19cbc
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-bg.xml
@@ -0,0 +1,287 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-bg" description="Default Bulgarian" locale="bg">
+<level value="1">
+а
+б
+в
+г
+д
+е
+ж
+з
+и
+й
+к
+л
+м
+н
+о
+п
+р
+с
+т
+у
+ф
+х
+ц
+ч
+ш
+щ
+ъ
+ь
+ю
+я
+</level>
+<level value="2">
+а
+б
+в
+г
+д
+е
+ж
+з
+и
+й
+к
+л
+м
+н
+о
+п
+р
+с
+т
+у
+ф
+х
+ц
+ч
+ш
+щ
+ъ
+ь
+ю
+я
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="3">
+А
+Б
+В
+Г
+Д
+Е
+Ж
+З
+И
+Й
+К
+Л
+М
+Н
+О
+П
+Р
+С
+Т
+У
+Ф
+Х
+Ц
+Ч
+Ш
+Щ
+Ъ
+Ь
+Ю
+Я
+</level>
+<level value="4">
+А
+Б
+В
+Г
+Д
+Е
+Ж
+З
+И
+Й
+К
+Л
+М
+Н
+О
+П
+Р
+С
+Т
+У
+Ф
+Х
+Ц
+Ч
+Ш
+Щ
+Ъ
+Ь
+Ю
+Я
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="5">
+а
+б
+в
+г
+д
+е
+ж
+з
+и
+й
+к
+л
+м
+н
+о
+п
+р
+с
+т
+у
+ф
+х
+ц
+ч
+ш
+щ
+ъ
+ь
+ю
+я
+А
+Б
+В
+Г
+Д
+Е
+Ж
+З
+И
+Й
+К
+Л
+М
+Н
+О
+П
+Р
+С
+Т
+У
+Ф
+Х
+Ц
+Ч
+Ш
+Щ
+Ъ
+Ь
+Ю
+Я
+</level>
+<level value="6">
+а
+б
+в
+г
+д
+е
+ж
+з
+и
+й
+к
+л
+м
+н
+о
+п
+р
+с
+т
+у
+ф
+х
+ц
+ч
+ш
+щ
+ъ
+ь
+ю
+я
+А
+Б
+В
+Г
+Д
+Е
+Ж
+З
+И
+Й
+К
+Л
+М
+Н
+О
+П
+Р
+С
+Т
+У
+Ф
+Х
+Ц
+Ч
+Ш
+Щ
+Ъ
+Ь
+Ю
+Я
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-br.xml 
b/src/gletters-activity/resources/gletters/default-br.xml
new file mode 100644
index 0000000..4b14053
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-br.xml
@@ -0,0 +1,259 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-br" description="Default Breton" locale="br">
+<level value="1">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+ñ
+o
+r
+s
+t
+u
+ù
+v
+w
+y
+z
+'
+</level>
+<level value="2">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+ñ
+o
+r
+s
+t
+u
+ù
+v
+w
+y
+z
+'
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="3">
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+Ñ
+O
+P
+R
+S
+T
+U
+Ù
+V
+W
+Y
+Z
+'
+</level>
+<level value="4">
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+Ñ
+O
+P
+R
+S
+T
+U
+Ù
+V
+W
+Y
+Z
+'
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="5">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+ñ
+o
+r
+s
+t
+u
+ù
+v
+w
+y
+z
+'
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+Ñ
+O
+P
+R
+S
+T
+U
+Ù
+V
+W
+Y
+Z
+'
+</level>
+<level value="6">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+ñ
+o
+r
+s
+t
+u
+ù
+v
+w
+y
+z
+'
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+Ñ
+O
+P
+R
+S
+T
+U
+Ù
+V
+W
+Y
+Z
+'
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-ca.xml 
b/src/gletters-activity/resources/gletters/default-ca.xml
new file mode 100644
index 0000000..495dc27
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-ca.xml
@@ -0,0 +1,263 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-ca" description="Default Catalan" locale="ca">
+<level value="1">
+a
+b
+c
+ç
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+</level>
+<level value="2">
+a
+b
+c
+ç
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="3">
+A
+B
+C
+Ç
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+</level>
+<level value="4">
+A
+B
+C
+Ç
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="5">
+a
+b
+c
+ç
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+A
+B
+C
+Ç
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+</level>
+<level value="6">
+a
+b
+c
+ç
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+A
+B
+C
+Ç
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-cs.xml 
b/src/gletters-activity/resources/gletters/default-cs.xml
new file mode 100644
index 0000000..008b56f
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-cs.xml
@@ -0,0 +1,375 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-cs" description="Default Czech" locale="cs">
+<level value="1">
+a
+á
+b
+c
+č
+d
+ď
+e
+é
+ě
+f
+g
+h
+i
+í
+j
+k
+l
+m
+n
+ň
+o
+ó
+p
+q
+r
+ř
+s
+š
+t
+ť
+u
+ú
+ů
+v
+w
+x
+y
+ý
+z
+ž
+</level>
+<level value="2">
+a
+á
+b
+c
+č
+d
+ď
+e
+é
+ě
+f
+g
+h
+i
+í
+j
+k
+l
+m
+n
+ň
+o
+ó
+p
+q
+r
+ř
+s
+š
+t
+ť
+u
+ú
+ů
+v
+w
+x
+y
+ý
+z
+ž
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="3">
+A
+Á
+B
+C
+Č
+D
+Ď
+E
+É
+Ě
+F
+G
+H
+I
+Í
+J
+K
+L
+M
+N
+Ň
+O
+Ó
+P
+Q
+R
+Ř
+S
+Š
+T
+Ť
+U
+Ú
+Ů
+V
+W
+X
+Y
+Ý
+Z
+Ž
+</level>
+<level value="4">
+A
+Á
+B
+C
+Č
+D
+Ď
+E
+É
+Ě
+F
+G
+H
+I
+Í
+J
+K
+L
+M
+N
+Ň
+O
+Ó
+P
+Q
+R
+Ř
+S
+Š
+T
+Ť
+U
+Ú
+Ů
+V
+W
+X
+Y
+Ý
+Z
+Ž
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="5">
+a
+á
+b
+c
+č
+d
+ď
+e
+é
+ě
+f
+g
+h
+i
+í
+j
+k
+l
+m
+n
+ň
+o
+ó
+p
+q
+r
+ř
+s
+š
+t
+ť
+u
+ú
+ů
+v
+w
+x
+y
+ý
+z
+ž
+A
+Á
+B
+C
+Č
+D
+Ď
+E
+É
+Ě
+F
+G
+H
+I
+Í
+J
+K
+L
+M
+N
+Ň
+O
+Ó
+P
+Q
+R
+Ř
+S
+Š
+T
+Ť
+U
+Ú
+Ů
+V
+W
+X
+Y
+Ý
+Z
+Ž
+</level>
+<level value="6">
+a
+á
+b
+c
+č
+d
+ď
+e
+é
+ě
+f
+g
+h
+i
+í
+j
+k
+l
+m
+n
+ň
+o
+ó
+p
+q
+r
+ř
+s
+š
+t
+ť
+u
+ú
+ů
+v
+w
+x
+y
+ý
+z
+ž
+A
+Á
+B
+C
+Č
+D
+Ď
+E
+É
+Ě
+F
+G
+H
+I
+Í
+J
+K
+L
+M
+N
+Ň
+O
+Ó
+P
+Q
+R
+Ř
+S
+Š
+T
+Ť
+U
+Ú
+Ů
+V
+W
+X
+Y
+Ý
+Z
+Ž
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-da.xml 
b/src/gletters-activity/resources/gletters/default-da.xml
new file mode 100644
index 0000000..e61b800
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-da.xml
@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-da" description="Default Danish" locale="da">
+<level value="1">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+æ
+ø
+å
+</level>
+<level value="2">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+æ
+ø
+å
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="3">
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+Æ
+Ø
+Å
+</level>
+<level value="4">
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+Æ
+Ø
+Å
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="5">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+æ
+ø
+å
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+Æ
+Ø
+Å
+</level>
+<level value="6">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+æ
+ø
+å
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+Æ
+Ø
+Å
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-de.xml 
b/src/gletters-activity/resources/gletters/default-de.xml
new file mode 100644
index 0000000..ddba058
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-de.xml
@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default_de" description="default deutsch" locale="de">
+<level value="1">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+ä
+ö
+ü
+</level>
+<level value="2">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+ä
+ö
+ü
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="3">
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+Ä
+Ö
+Ü
+</level>
+<level value="4">
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+Ä
+Ö
+Ü
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="5">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+ä
+ö
+ü
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+Ä
+Ö
+Ü
+</level>
+<level value="6">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+ä
+ö
+ü
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+Ä
+Ö
+Ü
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-el.xml 
b/src/gletters-activity/resources/gletters/default-el.xml
new file mode 100644
index 0000000..7e0401b
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-el.xml
@@ -0,0 +1,239 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-el" description="Default Greek" locale="el">
+<level value="1">
+α
+β
+γ
+δ
+ε
+ζ
+η
+θ
+ι
+κ
+λ
+μ
+ν
+ξ
+ο
+π
+ρ
+σ
+τ
+υ
+φ
+χ
+ψ
+ω
+</level>
+<level value="2">
+α
+β
+γ
+δ
+ε
+ζ
+η
+θ
+ι
+κ
+λ
+μ
+ν
+ξ
+ο
+π
+ρ
+σ
+τ
+υ
+φ
+χ
+ψ
+ω
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="3">
+Α
+Β
+Γ
+Δ
+Ε
+Ζ
+Η
+Θ
+Ι
+Κ
+Λ
+Μ
+Ν
+Ξ
+Ο
+Π
+Ρ
+Σ
+Τ
+Υ
+Φ
+Χ
+Ψ
+Ω
+</level>
+<level value="4">
+Α
+Β
+Γ
+Δ
+Ε
+Ζ
+Η
+Θ
+Ι
+Κ
+Λ
+Μ
+Ν
+Ξ
+Ο
+Π
+Ρ
+Σ
+Τ
+Υ
+Φ
+Χ
+Ψ
+Ω
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="5">
+α
+β
+γ
+δ
+ε
+ζ
+η
+θ
+ι
+κ
+λ
+μ
+ν
+ξ
+ο
+π
+ρ
+σ
+τ
+υ
+φ
+χ
+ψ
+ω
+Α
+Β
+Γ
+Δ
+Ε
+Ζ
+Η
+Θ
+Ι
+Κ
+Λ
+Μ
+Ν
+Ξ
+Ο
+Π
+Ρ
+Σ
+Τ
+Υ
+Φ
+Χ
+Ψ
+Ω
+</level>
+<level value="6">
+α
+β
+γ
+δ
+ε
+ζ
+η
+θ
+ι
+κ
+λ
+μ
+ν
+ξ
+ο
+π
+ρ
+σ
+τ
+υ
+φ
+χ
+ψ
+ω
+Α
+Β
+Γ
+Δ
+Ε
+Ζ
+Η
+Θ
+Ι
+Κ
+Λ
+Μ
+Ν
+Ξ
+Ο
+Π
+Ρ
+Σ
+Τ
+Υ
+Φ
+Χ
+Ψ
+Ω
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-en.xml 
b/src/gletters-activity/resources/gletters/default-en.xml
new file mode 100644
index 0000000..7867f76
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-en.xml
@@ -0,0 +1,255 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-en" description="English" locale="en">
+<level value="1">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+</level>
+<level value="2">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+</level>
+<level value="3">
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+</level>
+<level value="4">
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+</level>
+<level value="5">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+</level>
+<level value="6">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+</level>
+</Wordlist>
+</GCompris>
diff --git a/src/gletters-activity/resources/gletters/default-es.xml 
b/src/gletters-activity/resources/gletters/default-es.xml
new file mode 100644
index 0000000..7b1eac0
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-es.xml
@@ -0,0 +1,263 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-es" description="Default Spanish" locale="es">
+<level value="1">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+ñ
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+</level>
+<level value="2">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+ñ
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="3">
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+Ñ
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+</level>
+<level value="4">
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+Ñ
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="5">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+ñ
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+Ñ
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+</level>
+<level value="6">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+ñ
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+Ñ
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-et.xml 
b/src/gletters-activity/resources/gletters/default-et.xml
new file mode 100644
index 0000000..f7c7310
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-et.xml
@@ -0,0 +1,303 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-et" description="Default Estonian" locale="et">
+<level value="1">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+š
+z
+ž
+t
+u
+v
+w
+õ
+ä
+ö
+ü
+x
+y
+</level>
+<level value="2">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+š
+z
+ž
+t
+u
+v
+w
+õ
+ä
+ö
+ü
+x
+y
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="3">
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+Š
+Z
+Ž
+T
+U
+V
+W
+Õ
+Ä
+Ö
+Ü
+X
+Y
+</level>
+<level value="4">
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+Š
+Z
+Ž
+T
+U
+V
+W
+Õ
+Ä
+Ö
+Ü
+X
+Y
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="5">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+š
+z
+ž
+t
+u
+v
+w
+õ
+ä
+ö
+ü
+x
+y
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+Š
+Z
+Ž
+T
+U
+V
+W
+Õ
+Ä
+Ö
+Ü
+X
+Y
+</level>
+<level value="6">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+š
+z
+ž
+t
+u
+v
+w
+õ
+ä
+ö
+ü
+x
+y
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+Š
+Z
+Ž
+T
+U
+V
+W
+Õ
+Ä
+Ö
+Ü
+X
+Y
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-fa.xml 
b/src/gletters-activity/resources/gletters/default-fa.xml
new file mode 100644
index 0000000..0530a75
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-fa.xml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-fa" description="Default Farsi" locale="fa">
+<level value="1">
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="2">
+ا
+ل
+ف
+ب
+پ
+ت
+س
+ج
+چ
+ح
+خ
+د
+ذ
+ر
+ز
+ژ
+س
+ش
+ص
+ض
+ط
+ظ
+ع
+غ
+ف
+ق
+ک
+گ
+ل
+م
+ن
+و
+ه
+ی
+</level>
+<level value="3">
+ا
+ل
+ف
+ب
+پ
+ت
+س
+ج
+چ
+ح
+خ
+د
+ذ
+ر
+ز
+ژ
+س
+ش
+ص
+ض
+ط
+ظ
+ع
+غ
+ف
+ق
+ک
+گ
+ل
+م
+ن
+و
+ه
+ی
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-fi.xml 
b/src/gletters-activity/resources/gletters/default-fi.xml
new file mode 100644
index 0000000..3b01c78
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-fi.xml
@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-fi" description="Default Finnish" locale="fi">
+<level value="1">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+å
+ä
+ö
+</level>
+<level value="2">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+å
+ä
+ö
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="3">
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+Å
+Ä
+Ö
+</level>
+<level value="4">
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+Å
+Ä
+Ö
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="5">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+å
+ä
+ö
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+Å
+Ä
+Ö
+</level>
+<level value="6">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+å
+ä
+ö
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+Å
+Ä
+Ö
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-gd.xml 
b/src/gletters-activity/resources/gletters/default-gd.xml
new file mode 100644
index 0000000..292a8f4
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-gd.xml
@@ -0,0 +1,271 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-gd" description="Gàidhlig" locale="gd">
+<level value="1">
+a
+b
+c
+d
+e
+f
+g
+i
+l
+m
+n
+o
+p
+r
+s
+t
+u
+</level>
+<level value="2">
+a
+b
+c
+d
+e
+f
+g
+i
+l
+m
+n
+o
+p
+r
+s
+t
+u
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="3">
+A
+B
+C
+D
+E
+F
+G
+I
+L
+M
+N
+O
+P
+R
+S
+T
+U
+</level>
+<level value="4">
+A
+B
+C
+D
+E
+F
+G
+I
+L
+M
+N
+O
+P
+R
+S
+T
+U
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="5">
+a
+b
+c
+d
+e
+f
+g
+i
+l
+m
+n
+o
+p
+r
+s
+t
+u
+A
+B
+C
+D
+E
+F
+G
+I
+L
+M
+N
+O
+P
+R
+S
+T
+U
+</level>
+<level value="6">
+bh
+ch
+dh
+fh
+gh
+mh
+ph
+sh
+th
+à
+è
+ì
+ò
+ù
+</level>
+<level value="7">
+BH
+CH
+DH
+FH
+GH
+MH
+PH
+SH
+TH
+À
+È
+Ì
+Ò
+Ù
+</level>
+<level value="8">
+bh
+ch
+dh
+fh
+gh
+mh
+ph
+sh
+th
+à
+è
+ì
+ò
+ù
+BH
+CH
+DH
+FH
+GH
+MH
+PH
+SH
+TH
+À
+È
+Ì
+Ò
+Ù
+</level>
+a
+b
+c
+d
+e
+f
+g
+i
+l
+m
+n
+o
+p
+r
+s
+t
+u
+A
+B
+C
+D
+E
+F
+G
+I
+L
+M
+N
+O
+P
+R
+S
+T
+U
+bh
+ch
+dh
+fh
+gh
+mh
+ph
+sh
+th
+à
+è
+ì
+ò
+ù
+BH
+CH
+DH
+FH
+GH
+MH
+PH
+SH
+TH
+À
+È
+Ì
+Ò
+Ù
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-gl.xml 
b/src/gletters-activity/resources/gletters/default-gl.xml
new file mode 100644
index 0000000..457aa9a
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-gl.xml
@@ -0,0 +1,243 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-gl" description="Default Galician" locale="gl">
+<level value="1">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+l
+m
+n
+ñ
+o
+p
+q
+r
+s
+t
+u
+v
+x
+z
+</level>
+<level value="2">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+l
+m
+n
+ñ
+o
+p
+q
+r
+s
+t
+u
+v
+x
+z
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="3">
+A
+B
+C
+D
+E
+F
+G
+H
+I
+K
+L
+M
+N
+Ñ
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+</level>
+<level value="4">
+A
+B
+C
+D
+E
+F
+G
+H
+I
+K
+L
+M
+N
+Ñ
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="5">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+l
+m
+n
+ñ
+o
+p
+q
+r
+s
+t
+u
+v
+x
+z
+A
+B
+C
+D
+E
+F
+G
+H
+I
+K
+L
+M
+N
+Ñ
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+</level>
+<level value="6">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+l
+m
+n
+ñ
+o
+p
+q
+r
+s
+t
+u
+v
+x
+z
+A
+B
+C
+D
+E
+F
+G
+H
+I
+K
+L
+M
+N
+Ñ
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-gu.xml 
b/src/gletters-activity/resources/gletters/default-gu.xml
new file mode 100644
index 0000000..9664c2f
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-gu.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-gu" description="Default Gujarati" locale="gu">
+<level value="1">
+ક
+ખ
+ગ
+ઘ
+ચ
+છ
+જ
+ઝ
+ગ
+ટ
+ઠ
+ડ
+ઢ
+ણ
+ત
+થ
+દ
+ધ
+ન
+પ
+ફ
+બ
+ભ
+મ
+ય
+ર
+લ
+વ
+સ
+શ
+ષ
+હ
+ળ
+ક
+્
+ષ
+જ
+્
+ઞ
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-he.xml 
b/src/gletters-activity/resources/gletters/default-he.xml
new file mode 100644
index 0000000..b089509
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-he.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-he" description="Default Hebrew" locale="he">
+<level value="1">
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="2">
+א
+ב
+ג
+ד
+ה
+ו
+ז
+ח
+ט
+י
+כ
+ך
+ל
+מ
+ם
+נ
+ס
+ע
+פ
+ף
+צ
+ץ
+ק
+ר
+ש
+ת
+</level>
+<level value="3">
+א
+ב
+ג
+ד
+ה
+ו
+ז
+ח
+ט
+י
+כ
+ך
+ל
+מ
+ם
+נ
+ס
+ע
+פ
+ף
+צ
+ץ
+ק
+ר
+ש
+ת
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-hu.xml 
b/src/gletters-activity/resources/gletters/default-hu.xml
new file mode 100644
index 0000000..4243a3a
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-hu.xml
@@ -0,0 +1,323 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-hu" description="Default Hungarian" locale="hu">
+<level value="1">
+a
+á
+b
+c
+d
+e
+é
+f
+g
+h
+i
+í
+j
+k
+l
+m
+n
+o
+ó
+ö
+ő
+p
+q
+r
+s
+t
+u
+ú
+ü
+ű
+v
+w
+x
+y
+z
+</level>
+<level value="2">
+a
+á
+b
+c
+d
+e
+é
+f
+g
+h
+i
+í
+j
+k
+l
+m
+n
+o
+ó
+ö
+ő
+p
+q
+r
+s
+t
+u
+ú
+ü
+ű
+v
+w
+x
+y
+z
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="3">
+A
+Á
+B
+C
+D
+E
+É
+F
+G
+H
+I
+Í
+J
+K
+L
+M
+N
+O
+Ó
+Ö
+Ő
+P
+Q
+R
+S
+T
+U
+Ú
+Ü
+Ű
+X
+Y
+V
+Z
+</level>
+<level value="4">
+A
+Á
+B
+C
+D
+E
+É
+F
+G
+H
+I
+Í
+J
+K
+L
+M
+N
+O
+Ó
+Ö
+Ő
+P
+Q
+R
+S
+T
+U
+Ú
+Ü
+Ű
+X
+Y
+V
+Z
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="5">
+a
+á
+b
+c
+d
+e
+é
+f
+g
+h
+i
+í
+j
+k
+l
+m
+n
+o
+ó
+ö
+ő
+p
+q
+r
+s
+t
+u
+ú
+ü
+ű
+v
+w
+x
+y
+z
+A
+Á
+B
+C
+D
+E
+É
+F
+G
+H
+I
+Í
+J
+K
+L
+M
+N
+O
+Ó
+Ö
+Ő
+P
+Q
+R
+S
+T
+U
+Ú
+Ü
+Ű
+X
+Y
+V
+Z
+</level>
+<level value="6">
+a
+á
+b
+c
+d
+e
+é
+f
+g
+h
+i
+í
+j
+k
+l
+m
+n
+o
+ó
+ö
+ő
+p
+q
+r
+s
+t
+u
+ú
+ü
+ű
+v
+w
+x
+y
+z
+A
+Á
+B
+C
+D
+E
+É
+F
+G
+H
+I
+Í
+J
+K
+L
+M
+N
+O
+Ó
+Ö
+Ő
+P
+Q
+R
+S
+T
+U
+Ú
+Ü
+Ű
+X
+Y
+V
+Z
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-ka.xml 
b/src/gletters-activity/resources/gletters/default-ka.xml
new file mode 100644
index 0000000..eb20eb1
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-ka.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-ka" description="Default Georgian" locale="ka">
+<level value="1">
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="2">
+ა
+ბ
+გ
+დ
+ე
+ვ
+ზ
+თ
+ი
+კ
+ლ
+მ
+ნ
+ო
+პ
+ჟ
+რ
+ს
+ტ
+უ
+ფ
+ქ
+ღ
+ყ
+შ
+ჩ
+ც
+ძ
+წ
+ჭ
+ხ
+ჯ
+ჰ
+</level>
+<level value="3">
+ა
+ბ
+გ
+დ
+ე
+ვ
+ზ
+თ
+ი
+კ
+ლ
+მ
+ნ
+ო
+პ
+ჟ
+რ
+ს
+ტ
+უ
+ფ
+ქ
+ღ
+ყ
+შ
+ჩ
+ც
+ძ
+წ
+ჭ
+ხ
+ჯ
+ჰ
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-lt.xml 
b/src/gletters-activity/resources/gletters/default-lt.xml
new file mode 100644
index 0000000..e0d7e95
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-lt.xml
@@ -0,0 +1,299 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-lt" description="Default Lithuanian" locale="lt">
+<level value="1">
+a
+ą
+b
+c
+č
+d
+e
+ę
+ė
+f
+g
+h
+i
+į
+y
+j
+k
+l
+m
+n
+o
+p
+r
+s
+š
+t
+u
+ų
+ū
+v
+z
+ž
+</level>
+<level value="2">
+a
+ą
+b
+c
+č
+d
+e
+ę
+ė
+f
+g
+h
+i
+į
+y
+j
+k
+l
+m
+n
+o
+p
+r
+s
+š
+t
+u
+ų
+ū
+v
+z
+ž
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="3">
+A
+Ą
+C
+Č
+D
+E
+Ę
+Ė
+F
+G
+H
+I
+Į
+Y
+J
+K
+L
+M
+N
+O
+P
+R
+S
+Š
+T
+U
+Ų
+Ū
+V
+Z
+Ž
+</level>
+<level value="4">
+A
+Ą
+C
+Č
+D
+E
+Ę
+Ė
+F
+G
+H
+I
+Į
+Y
+J
+K
+L
+M
+N
+O
+P
+R
+S
+Š
+T
+U
+Ų
+Ū
+V
+Z
+Ž
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="5">
+a
+ą
+b
+c
+č
+d
+e
+ę
+ė
+f
+g
+h
+i
+į
+y
+j
+k
+l
+m
+n
+o
+p
+r
+s
+š
+t
+u
+ų
+ū
+v
+z
+ž
+A
+Ą
+C
+Č
+D
+E
+Ę
+Ė
+F
+G
+H
+I
+Į
+Y
+J
+K
+L
+M
+N
+O
+P
+R
+S
+Š
+T
+U
+Ų
+Ū
+V
+Z
+Ž
+</level>
+<level value="6">
+a
+ą
+b
+c
+č
+d
+e
+ę
+ė
+f
+g
+h
+i
+į
+y
+j
+k
+l
+m
+n
+o
+p
+r
+s
+š
+t
+u
+ų
+ū
+v
+z
+ž
+A
+Ą
+C
+Č
+D
+E
+Ę
+Ė
+F
+G
+H
+I
+Į
+Y
+J
+K
+L
+M
+N
+O
+P
+R
+S
+Š
+T
+U
+Ų
+Ū
+V
+Z
+Ž
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-lv.xml 
b/src/gletters-activity/resources/gletters/default-lv.xml
new file mode 100644
index 0000000..c111b05
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-lv.xml
@@ -0,0 +1,311 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-lv" description="Default Latvian (Lettish)" locale="lv">
+<level value="1">
+a
+ā
+b
+c
+č
+d
+e
+ē
+f
+g
+ģ
+h
+i
+ī
+j
+k
+ķ
+l
+ļ
+m
+n
+ņ
+o
+p
+r
+s
+š
+t
+u
+ū
+v
+z
+ž
+</level>
+<level value="2">
+a
+ā
+b
+c
+č
+d
+e
+ē
+f
+g
+ģ
+h
+i
+ī
+j
+k
+ķ
+l
+ļ
+m
+n
+ņ
+o
+p
+r
+s
+š
+t
+u
+ū
+v
+z
+ž
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="3">
+A
+Ā
+B
+C
+Č
+D
+E
+Ē
+F
+G
+Ģ
+H
+I
+Ī
+J
+K
+Ķ
+L
+Ļ
+M
+N
+Ņ
+O
+P
+R
+S
+Š
+T
+U
+Ū
+V
+Z
+Ž
+</level>
+<level value="4">
+A
+Ā
+B
+C
+Č
+D
+E
+Ē
+F
+G
+Ģ
+H
+I
+Ī
+J
+K
+Ķ
+L
+Ļ
+M
+N
+Ņ
+O
+P
+R
+S
+Š
+T
+U
+Ū
+V
+Z
+Ž
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="5">
+a
+ā
+b
+c
+č
+d
+e
+ē
+f
+g
+ģ
+h
+i
+ī
+j
+k
+ķ
+l
+ļ
+m
+n
+ņ
+o
+p
+r
+s
+š
+t
+u
+ū
+v
+z
+ž
+A
+Ā
+B
+C
+Č
+D
+E
+Ē
+F
+G
+Ģ
+H
+I
+Ī
+J
+K
+Ķ
+L
+Ļ
+M
+N
+Ņ
+O
+P
+R
+S
+Š
+T
+U
+Ū
+V
+Z
+Ž
+</level>
+<level value="6">
+a
+ā
+b
+c
+č
+d
+e
+ē
+f
+g
+ģ
+h
+i
+ī
+j
+k
+ķ
+l
+ļ
+m
+n
+ņ
+o
+p
+r
+s
+š
+t
+u
+ū
+v
+z
+ž
+A
+Ā
+B
+C
+Č
+D
+E
+Ē
+F
+G
+Ģ
+H
+I
+Ī
+J
+K
+Ķ
+L
+Ļ
+M
+N
+Ņ
+O
+P
+R
+S
+Š
+T
+U
+Ū
+V
+Z
+Ž
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-nn.xml 
b/src/gletters-activity/resources/gletters/default-nn.xml
new file mode 100644
index 0000000..1c2e0c8
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-nn.xml
@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-nn" description="Default Norwegian Nynorsk" locale="nn">
+<level value="1">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+æ
+ø
+å
+</level>
+<level value="2">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+æ
+ø
+å
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="3">
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+Æ
+Ø
+Å
+</level>
+<level value="4">
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+Æ
+Ø
+Å
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="5">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+æ
+ø
+å
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+Æ
+Ø
+Å
+</level>
+<level value="6">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+æ
+ø
+å
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+Æ
+Ø
+Å
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-pl.xml 
b/src/gletters-activity/resources/gletters/default-pl.xml
new file mode 100644
index 0000000..6ff23fd
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-pl.xml
@@ -0,0 +1,311 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-pl" description="Default Polish" locale="pl">
+<level value="1">
+a
+ą
+b
+c
+ć
+d
+e
+ę
+f
+g
+h
+i
+j
+k
+l
+ł
+m
+n
+ń
+o
+ó
+p
+r
+s
+ś
+t
+u
+w
+x
+y
+z
+ź
+ż
+</level>
+<level value="2">
+a
+ą
+b
+c
+ć
+d
+e
+ę
+f
+g
+h
+i
+j
+k
+l
+ł
+m
+n
+ń
+o
+ó
+p
+r
+s
+ś
+t
+u
+w
+x
+y
+z
+ź
+ż
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="3">
+A
+Ą
+B
+C
+Ć
+D
+E
+Ę
+F
+G
+H
+I
+J
+K
+L
+Ł
+M
+N
+Ń
+O
+Ó
+P
+R
+S
+Ś
+T
+U
+W
+X
+Y
+Z
+Ź
+Ż
+</level>
+<level value="4">
+A
+Ą
+B
+C
+Ć
+D
+E
+Ę
+F
+G
+H
+I
+J
+K
+L
+Ł
+M
+N
+Ń
+O
+Ó
+P
+R
+S
+Ś
+T
+U
+W
+X
+Y
+Z
+Ź
+Ż
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="5">
+a
+ą
+b
+c
+ć
+d
+e
+ę
+f
+g
+h
+i
+j
+k
+l
+ł
+m
+n
+ń
+o
+ó
+p
+r
+s
+ś
+t
+u
+w
+x
+y
+z
+ź
+ż
+A
+Ą
+B
+C
+Ć
+D
+E
+Ę
+F
+G
+H
+I
+J
+K
+L
+Ł
+M
+N
+Ń
+O
+Ó
+P
+R
+S
+Ś
+T
+U
+W
+X
+Y
+Z
+Ź
+Ż
+</level>
+<level value="6">
+a
+ą
+b
+c
+ć
+d
+e
+ę
+f
+g
+h
+i
+j
+k
+l
+ł
+m
+n
+ń
+o
+ó
+p
+r
+s
+ś
+t
+u
+w
+x
+y
+z
+ź
+ż
+A
+Ą
+B
+C
+Ć
+D
+E
+Ę
+F
+G
+H
+I
+J
+K
+L
+Ł
+M
+N
+Ń
+O
+Ó
+P
+R
+S
+Ś
+T
+U
+W
+X
+Y
+Z
+Ź
+Ż
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-ru.xml 
b/src/gletters-activity/resources/gletters/default-ru.xml
new file mode 100644
index 0000000..edf19f7
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-ru.xml
@@ -0,0 +1,287 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-ru" description="Default Russian" locale="ru">
+<level value="1">
+а
+б
+в
+г
+д
+е
+ё
+ж
+з
+и
+й
+к
+л
+м
+н
+о
+п
+р
+с
+т
+у
+ф
+х
+ц
+ч
+ш
+щ
+э
+ю
+я
+</level>
+<level value="2">
+а
+б
+в
+г
+д
+е
+ё
+ж
+з
+и
+й
+к
+л
+м
+н
+о
+п
+р
+с
+т
+у
+ф
+х
+ц
+ч
+ш
+щ
+э
+ю
+я
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="3">
+А
+Б
+В
+Г
+Д
+Е
+Ё
+Ж
+З
+И
+Й
+К
+Л
+М
+Н
+О
+П
+Р
+С
+Т
+У
+Ф
+Х
+Ц
+Ч
+Ш
+Щ
+Э
+Ю
+Я
+</level>
+<level value="4">
+А
+Б
+В
+Г
+Д
+Е
+Ё
+Ж
+З
+И
+Й
+К
+Л
+М
+Н
+О
+П
+Р
+С
+Т
+У
+Ф
+Х
+Ц
+Ч
+Ш
+Щ
+Э
+Ю
+Я
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="5">
+а
+б
+в
+г
+д
+е
+ё
+ж
+з
+и
+й
+к
+л
+м
+н
+о
+п
+р
+с
+т
+у
+ф
+х
+ц
+ч
+ш
+щ
+э
+ю
+я
+А
+Б
+В
+Г
+Д
+Е
+Ё
+Ж
+З
+И
+Й
+К
+Л
+М
+Н
+О
+П
+Р
+С
+Т
+У
+Ф
+Х
+Ц
+Ч
+Ш
+Щ
+Э
+Ю
+Я
+</level>
+<level value="6">
+а
+б
+в
+г
+д
+е
+ё
+ж
+з
+и
+й
+к
+л
+м
+н
+о
+п
+р
+с
+т
+у
+ф
+х
+ц
+ч
+ш
+щ
+э
+ю
+я
+А
+Б
+В
+Г
+Д
+Е
+Ё
+Ж
+З
+И
+Й
+К
+Л
+М
+Н
+О
+П
+Р
+С
+Т
+У
+Ф
+Х
+Ц
+Ч
+Ш
+Щ
+Э
+Ю
+Я
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-sk.xml 
b/src/gletters-activity/resources/gletters/default-sk.xml
new file mode 100644
index 0000000..2230a5e
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-sk.xml
@@ -0,0 +1,391 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-sk" description="Default Slovak" locale="sk">
+<level value="1">
+a
+á
+ä
+b
+c
+č
+d
+ď
+e
+é
+f
+g
+h
+i
+í
+j
+k
+l
+ľ
+ĺ
+m
+n
+ň
+o
+ó
+ô
+p
+q
+r
+ŕ
+s
+š
+t
+ť
+u
+ú
+v
+w
+x
+y
+ý
+z
+ž
+</level>
+<level value="2">
+a
+á
+ä
+b
+c
+č
+d
+ď
+e
+é
+f
+g
+h
+i
+í
+j
+k
+l
+ľ
+ĺ
+m
+n
+ň
+o
+ó
+ô
+p
+q
+r
+ŕ
+s
+š
+t
+ť
+u
+ú
+v
+w
+x
+y
+ý
+z
+ž
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="3">
+A
+Á
+Ä
+B
+C
+Č
+D
+Ď
+E
+É
+F
+G
+H
+I
+Í
+J
+K
+L
+Ľ
+Ĺ
+M
+N
+Ň
+O
+Ó
+Ô
+P
+Q
+R
+Ŕ
+S
+Š
+T
+Ť
+U
+Ú
+V
+W
+X
+Y
+Ý
+Z
+Ž
+</level>
+<level value="4">
+A
+Á
+Ä
+B
+C
+Č
+D
+Ď
+E
+É
+F
+G
+H
+I
+Í
+J
+K
+L
+Ľ
+Ĺ
+M
+N
+Ň
+O
+Ó
+Ô
+P
+Q
+R
+Ŕ
+S
+Š
+T
+Ť
+U
+Ú
+V
+W
+X
+Y
+Ý
+Z
+Ž
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="5">
+a
+á
+ä
+b
+c
+č
+d
+ď
+e
+é
+f
+g
+h
+i
+í
+j
+k
+l
+ľ
+ĺ
+m
+n
+ň
+o
+ó
+ô
+p
+q
+r
+ŕ
+s
+š
+t
+ť
+u
+ú
+v
+w
+x
+y
+ý
+z
+ž
+A
+Á
+Ä
+B
+C
+Č
+D
+Ď
+E
+É
+F
+G
+H
+I
+Í
+J
+K
+L
+Ľ
+Ĺ
+M
+N
+Ň
+O
+Ó
+Ô
+P
+Q
+R
+Ŕ
+S
+Š
+T
+Ť
+U
+Ú
+V
+W
+X
+Y
+Ý
+Z
+Ž
+</level>
+<level value="6">
+a
+á
+ä
+b
+c
+č
+d
+ď
+e
+é
+f
+g
+h
+i
+í
+j
+k
+l
+ľ
+ĺ
+m
+n
+ň
+o
+ó
+ô
+p
+q
+r
+ŕ
+s
+š
+t
+ť
+u
+ú
+v
+w
+x
+y
+ý
+z
+ž
+A
+Á
+Ä
+B
+C
+Č
+D
+Ď
+E
+É
+F
+G
+H
+I
+Í
+J
+K
+L
+Ľ
+Ĺ
+M
+N
+Ň
+O
+Ó
+Ô
+P
+Q
+R
+Ŕ
+S
+Š
+T
+Ť
+U
+Ú
+V
+W
+X
+Y
+Ý
+Z
+Ž
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-sl.xml 
b/src/gletters-activity/resources/gletters/default-sl.xml
new file mode 100644
index 0000000..2156f0f
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-sl.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-sl" description="Default Slovenian" locale="sl">
+<level value="1">
+a
+b
+c
+č
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+r
+s
+š
+t
+u
+v
+z
+ž
+</level>
+<level value="2">
+a
+b
+c
+č
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+r
+s
+š
+t
+u
+v
+z
+ž
+numbers
+</level>
+<level value="3">
+uppercase
+</level>
+<level value="4">
+uppercase
+numbers
+</level>
+<level value="5">
+a
+b
+c
+č
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+r
+s
+š
+t
+u
+v
+z
+ž
+uppercase
+</level>
+<level value="6">
+a
+b
+c
+č
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+r
+s
+š
+t
+u
+v
+z
+ž
+uppercase
+numbers
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-so.xml 
b/src/gletters-activity/resources/gletters/default-so.xml
new file mode 100644
index 0000000..0cc206f
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-so.xml
@@ -0,0 +1,231 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-so" description="Default Somali" locale="so">
+<level value="1">
+b
+t
+j
+x
+d
+r
+s
+c
+g
+f
+q
+k
+l
+m
+n
+w
+h
+y
+a
+e
+i
+o
+u
+</level>
+<level value="2">
+b
+t
+j
+x
+d
+r
+s
+c
+g
+f
+q
+k
+l
+m
+n
+w
+h
+y
+a
+e
+i
+o
+u
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="3">
+B
+T
+J
+X
+D
+R
+S
+C
+G
+F
+Q
+K
+L
+M
+N
+W
+H
+Y
+A
+E
+I
+O
+U
+</level>
+<level value="4">
+B
+T
+J
+X
+D
+R
+S
+C
+G
+F
+Q
+K
+L
+M
+N
+W
+H
+Y
+A
+E
+I
+O
+U
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="5">
+b
+t
+j
+x
+d
+r
+s
+c
+g
+f
+q
+k
+l
+m
+n
+w
+h
+y
+a
+e
+i
+o
+u
+B
+T
+J
+X
+D
+R
+S
+C
+G
+F
+Q
+K
+L
+M
+N
+W
+H
+Y
+A
+E
+I
+O
+U
+</level>
+<level value="6">
+b
+t
+j
+x
+d
+r
+s
+c
+g
+f
+q
+k
+l
+m
+n
+w
+h
+y
+a
+e
+i
+o
+u
+B
+T
+J
+X
+D
+R
+S
+C
+G
+F
+Q
+K
+L
+M
+N
+W
+H
+Y
+A
+E
+I
+O
+U
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-sr.xml 
b/src/gletters-activity/resources/gletters/default-sr.xml
new file mode 100644
index 0000000..655aba7
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-sr.xml
@@ -0,0 +1,287 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-sr" description="Default Serbian" locale="sr">
+<level value="1">
+а
+б
+в
+г
+д
+ђ
+е
+ж
+з
+и
+ј
+к
+л
+љ
+м
+н
+њ
+о
+п
+р
+с
+т
+ћ
+у
+ф
+х
+ц
+ч
+џ
+ш
+</level>
+<level value="2">
+а
+б
+в
+г
+д
+ђ
+е
+ж
+з
+и
+ј
+к
+л
+љ
+м
+н
+њ
+о
+п
+р
+с
+т
+ћ
+у
+ф
+х
+ц
+ч
+џ
+ш
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="3">
+А
+Б
+В
+Г
+Д
+Ђ
+Е
+Ж
+З
+И
+Ј
+К
+Л
+Љ
+М
+Н
+Њ
+О
+П
+Р
+С
+Т
+Ћ
+У
+Ф
+Х
+Ц
+Ч
+Џ
+Ш
+</level>
+<level value="4">
+А
+Б
+В
+Г
+Д
+Ђ
+Е
+Ж
+З
+И
+Ј
+К
+Л
+Љ
+М
+Н
+Њ
+О
+П
+Р
+С
+Т
+Ћ
+У
+Ф
+Х
+Ц
+Ч
+Џ
+Ш
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="5">
+а
+б
+в
+г
+д
+ђ
+е
+ж
+з
+и
+ј
+к
+л
+љ
+м
+н
+њ
+о
+п
+р
+с
+т
+ћ
+у
+ф
+х
+ц
+ч
+џ
+ш
+А
+Б
+В
+Г
+Д
+Ђ
+Е
+Ж
+З
+И
+Ј
+К
+Л
+Љ
+М
+Н
+Њ
+О
+П
+Р
+С
+Т
+Ћ
+У
+Ф
+Х
+Ц
+Ч
+Џ
+Ш
+</level>
+<level value="6">
+а
+б
+в
+г
+д
+ђ
+е
+ж
+з
+и
+ј
+к
+л
+љ
+м
+н
+њ
+о
+п
+р
+с
+т
+ћ
+у
+ф
+х
+ц
+ч
+џ
+ш
+А
+Б
+В
+Г
+Д
+Ђ
+Е
+Ж
+З
+И
+Ј
+К
+Л
+Љ
+М
+Н
+Њ
+О
+П
+Р
+С
+Т
+Ћ
+У
+Ф
+Х
+Ц
+Ч
+Џ
+Ш
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-sr latin xml 
b/src/gletters-activity/resources/gletters/default-sr latin xml
new file mode 100644
index 0000000..2b68f5f
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-sr latin xml
@@ -0,0 +1,347 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-sr latin" description="Default Serbian (Latin script)" locale="sr latin">
+<level value="1">
+a
+b
+v
+g
+d
+đ
+e
+ž
+z
+i
+j
+k
+l
+l
+j
+m
+n
+n
+j
+o
+p
+r
+s
+t
+ć
+u
+f
+h
+c
+č
+d
+ž
+š
+l
+o
+w
+e
+r
+c
+a
+s
+e
+</level>
+<level value="2">
+a
+b
+v
+g
+d
+đ
+e
+ž
+z
+i
+j
+k
+l
+l
+j
+m
+n
+n
+j
+o
+p
+r
+s
+t
+ć
+u
+f
+h
+c
+č
+d
+ž
+š
+l
+o
+w
+e
+r
+c
+a
+s
+e
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="3">
+A
+B
+V
+G
+D
+Đ
+E
+Ž
+Z
+I
+J
+K
+L
+L
+J
+M
+N
+N
+J
+O
+P
+R
+S
+T
+Ć
+U
+F
+H
+C
+Č
+D
+Ž
+Š
+</level>
+<level value="4">
+A
+B
+V
+G
+D
+Đ
+E
+Ž
+Z
+I
+J
+K
+L
+L
+J
+M
+N
+N
+J
+O
+P
+R
+S
+T
+Ć
+U
+F
+H
+C
+Č
+D
+Ž
+Š
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="5">
+a
+b
+v
+g
+d
+đ
+e
+ž
+z
+i
+j
+k
+l
+l
+j
+m
+n
+n
+j
+o
+p
+r
+s
+t
+ć
+u
+f
+h
+c
+č
+d
+ž
+š
+l
+o
+w
+e
+r
+c
+a
+s
+e
+A
+B
+V
+G
+D
+Đ
+E
+Ž
+Z
+I
+J
+K
+L
+L
+J
+M
+N
+N
+J
+O
+P
+R
+S
+T
+Ć
+U
+F
+H
+C
+Č
+D
+Ž
+Š
+</level>
+<level value="6">
+a
+b
+v
+g
+d
+đ
+e
+ž
+z
+i
+j
+k
+l
+l
+j
+m
+n
+n
+j
+o
+p
+r
+s
+t
+ć
+u
+f
+h
+c
+č
+d
+ž
+š
+l
+o
+w
+e
+r
+c
+a
+s
+e
+A
+B
+V
+G
+D
+Đ
+E
+Ž
+Z
+I
+J
+K
+L
+L
+J
+M
+N
+N
+J
+O
+P
+R
+S
+T
+Ć
+U
+F
+H
+C
+Č
+D
+Ž
+Š
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-sv.xml 
b/src/gletters-activity/resources/gletters/default-sv.xml
new file mode 100644
index 0000000..52ad64d
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-sv.xml
@@ -0,0 +1,244 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-sv" description="Default Swedish" locale="sv">
+<level value="1">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+x
+y
+z
+å
+ä
+ö
+</level>
+<level value="2">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+x
+y
+z
+å
+ä
+ö
+numbers
+</level>
+<level value="3">
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+X
+Y
+Z
+Å
+Ä
+Ö
+</level>
+<level value="4">
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+X
+Y
+Z
+Å
+Ä
+Ö
+numbers
+</level>
+<level value="5">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+x
+y
+z
+å
+ä
+ö
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+X
+Y
+Z
+Å
+Ä
+Ö
+</level>
+<level value="6">
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+x
+y
+z
+å
+ä
+ö
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+X
+Y
+Z
+Å
+Ä
+Ö
+numbers
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-ta.xml 
b/src/gletters-activity/resources/gletters/default-ta.xml
new file mode 100644
index 0000000..e71f218
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-ta.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-ta" description="Default Tamil" locale="ta">
+<level value="1">
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="2">
+அ
+ஆ
+இ
+ஈ
+உ
+ஊ
+எ
+ஏ
+ஐ
+ஒ
+ஓ
+ஔ
+க
+ச
+ட
+த
+ப
+ற
+ய
+ர
+ல
+வ
+ழ
+ல
+ங
+ஞ
+ண
+ந
+ம
+ன
+</level>
+<level value="3">
+அ
+ஆ
+இ
+ஈ
+உ
+ஊ
+எ
+ஏ
+ஐ
+ஒ
+ஓ
+ஔ
+க
+ச
+ட
+த
+ப
+ற
+ய
+ர
+ல
+வ
+ழ
+ல
+ங
+ஞ
+ண
+ந
+ம
+ன
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-uk.xml 
b/src/gletters-activity/resources/gletters/default-uk.xml
new file mode 100644
index 0000000..f47e24d
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-uk.xml
@@ -0,0 +1,311 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-uk" description="Default Ukrainian" locale="uk">
+<level value="1">
+а
+б
+в
+г
+ґ
+д
+е
+є
+ж
+з
+и
+і
+ї
+й
+к
+л
+м
+н
+о
+п
+р
+с
+т
+у
+ф
+х
+ц
+ч
+ш
+щ
+ю
+я
+ь
+</level>
+<level value="2">
+а
+б
+в
+г
+ґ
+д
+е
+є
+ж
+з
+и
+і
+ї
+й
+к
+л
+м
+н
+о
+п
+р
+с
+т
+у
+ф
+х
+ц
+ч
+ш
+щ
+ю
+я
+ь
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="3">
+А
+Б
+В
+Г
+Ґ
+Д
+Е
+Є
+Ж
+З
+И
+І
+Ї
+Й
+К
+Л
+М
+Н
+О
+П
+Р
+С
+Т
+У
+Ф
+Х
+Ц
+Ч
+Ш
+Щ
+Ю
+Я
+Ь
+</level>
+<level value="4">
+А
+Б
+В
+Г
+Ґ
+Д
+Е
+Є
+Ж
+З
+И
+І
+Ї
+Й
+К
+Л
+М
+Н
+О
+П
+Р
+С
+Т
+У
+Ф
+Х
+Ц
+Ч
+Ш
+Щ
+Ю
+Я
+Ь
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="5">
+а
+б
+в
+г
+ґ
+д
+е
+є
+ж
+з
+и
+і
+ї
+й
+к
+л
+м
+н
+о
+п
+р
+с
+т
+у
+ф
+х
+ц
+ч
+ш
+щ
+ю
+я
+ь
+А
+Б
+В
+Г
+Ґ
+Д
+Е
+Є
+Ж
+З
+И
+І
+Ї
+Й
+К
+Л
+М
+Н
+О
+П
+Р
+С
+Т
+У
+Ф
+Х
+Ц
+Ч
+Ш
+Щ
+Ю
+Я
+Ь
+</level>
+<level value="6">
+а
+б
+в
+г
+ґ
+д
+е
+є
+ж
+з
+и
+і
+ї
+й
+к
+л
+м
+н
+о
+п
+р
+с
+т
+у
+ф
+х
+ц
+ч
+ш
+щ
+ю
+я
+ь
+А
+Б
+В
+Г
+Ґ
+Д
+Е
+Є
+Ж
+З
+И
+І
+Ї
+Й
+К
+Л
+М
+Н
+О
+П
+Р
+С
+Т
+У
+Ф
+Х
+Ц
+Ч
+Ш
+Щ
+Ю
+Я
+Ь
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/default-vi.xml 
b/src/gletters-activity/resources/gletters/default-vi.xml
new file mode 100644
index 0000000..31d04af
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/default-vi.xml
@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-vi" description="Default Vietnamese" locale="vi">
+<level value="1">
+a
+ă
+â
+b
+c
+d
+đ
+e
+ê
+g
+h
+i
+k
+l
+m
+n
+o
+ô
+ơ
+p
+q
+r
+s
+t
+u
+ư
+v
+x
+y
+</level>
+<level value="2">
+a
+ă
+â
+b
+c
+d
+đ
+e
+ê
+g
+h
+i
+k
+l
+m
+n
+o
+ô
+ơ
+p
+q
+r
+s
+t
+u
+ư
+v
+x
+y
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="3">
+A
+Ă
+Â
+B
+C
+D
+Đ
+E
+Ê
+G
+H
+I
+K
+L
+M
+N
+O
+Ô
+Ơ
+P
+Q
+R
+S
+T
+U
+Ư
+V
+X
+Y
+</level>
+<level value="4">
+A
+Ă
+Â
+B
+C
+D
+Đ
+E
+Ê
+G
+H
+I
+K
+L
+M
+N
+O
+Ô
+Ơ
+P
+Q
+R
+S
+T
+U
+Ư
+V
+X
+Y
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+<level value="5">
+a
+ă
+â
+b
+c
+d
+đ
+e
+ê
+g
+h
+i
+k
+l
+m
+n
+o
+ô
+ơ
+p
+q
+r
+s
+t
+u
+ư
+v
+x
+y
+A
+Ă
+Â
+B
+C
+D
+Đ
+E
+Ê
+G
+H
+I
+K
+L
+M
+N
+O
+Ô
+Ơ
+P
+Q
+R
+S
+T
+U
+Ư
+V
+X
+Y
+</level>
+<level value="6">
+a
+ă
+â
+b
+c
+d
+đ
+e
+ê
+g
+h
+i
+k
+l
+m
+n
+o
+ô
+ơ
+p
+q
+r
+s
+t
+u
+ư
+v
+x
+y
+A
+Ă
+Â
+B
+C
+D
+Đ
+E
+Ê
+G
+H
+I
+K
+L
+M
+N
+O
+Ô
+Ơ
+P
+Q
+R
+S
+T
+U
+Ư
+V
+X
+Y
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+</level>
+</Wordlist>
+</GCompris>
\ No newline at end of file
diff --git a/src/gletters-activity/resources/gletters/upper-en.xml 
b/src/gletters-activity/resources/gletters/upper-en.xml
new file mode 100644
index 0000000..69600a8
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/upper-en.xml
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-en" description="English" locale="en">
+<level value="1">
+a
+e
+i
+o
+u
+y
+</level>
+<level value="2">
+a
+e
+i
+o
+u
+y
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+</level>
+<level value="3">
+b
+c
+d
+f
+g
+h
+j
+k
+l
+m
+n
+p
+q
+r
+s
+t
+v
+w
+x
+z
+</level>
+<level value="4">
+b
+c
+d
+f
+g
+h
+j
+k
+l
+m
+n
+p
+q
+r
+s
+t
+v
+w
+x
+z
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+</level>
+<level value="5">
+b
+c
+d
+f
+g
+h
+j
+k
+l
+m
+n
+p
+q
+r
+s
+t
+v
+w
+x
+z
+a
+e
+i
+o
+u
+y
+</level>
+<level value="6">
+b
+c
+d
+f
+g
+h
+j
+k
+l
+m
+n
+p
+q
+r
+s
+t
+v
+w
+x
+z
+a
+e
+i
+o
+u
+y
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+</level>
+</Wordlist>
+</GCompris>
diff --git a/src/gletters-activity/resources/gletters/upper-gd.xml 
b/src/gletters-activity/resources/gletters/upper-gd.xml
new file mode 100644
index 0000000..836fc48
--- /dev/null
+++ b/src/gletters-activity/resources/gletters/upper-gd.xml
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<GCompris>
+<Wordlist name="default-gd" description="Gàidhlig" locale="gd">
+<level value="1">
+a
+e
+i
+o
+u
+</level>
+<level value="2">
+a
+e
+i
+o
+u
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+</level>
+<level value="3">
+b
+c
+d
+f
+g
+h
+l
+m
+n
+p
+r
+s
+t
+</level>
+<level value="4">
+b
+c
+d
+f
+g
+h
+l
+m
+n
+p
+r
+s
+t
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+</level>
+<level value="5">
+b
+c
+d
+f
+g
+h
+l
+m
+n
+p
+r
+s
+t
+a
+e
+i
+o
+u
+</level>
+<level value="6">
+à
+è
+ì
+ò
+ù
+</level>
+<level value="7">
+bh
+ch
+dh
+fh
+gh
+mh
+ph
+sh
+th
+</level>
+<level value="8">
+à
+è
+ì
+ò
+ù
+bh
+ch
+dh
+fh
+gh
+mh
+ph
+sh
+th
+</level>
+<level value="9">
+b
+c
+d
+f
+g
+h
+l
+m
+n
+p
+r
+s
+t
+a
+e
+i
+o
+u
+à
+è
+ì
+ò
+ù
+bh
+ch
+dh
+fh
+gh
+mh
+ph
+sh
+th
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+</level>
+</Wordlist>
+</GCompris>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]