   # Supported languages by the app (when translation is done)
   @Languages: {}
   # [Boolean] If userFavLang is set into chromeStore or not
-  @userFavLangChromeStoreIsSet: undefined
+  #@userFavLangChromeStoreIsSet: undefined
   # [Boolean] If userFavLocale is set into chromeStore or not
   @userFavLocaleChromeStoreIsSet: undefined
   # [Boolean] If userFavLang is set into syncStore or not
-  @userFavLangSyncStoreIsSet: undefined
+  #@userFavLangSyncStoreIsSet: undefined
   # [Boolean] If userFavLocale is set into syncStore or not
   @userFavLocaleSyncStoreIsSet: undefined
 
 
+
+
   @init: (cb) =>
 
     @chromeStore = new ledger.storage.ChromeStore('i18n')
+
+    @favLang
 
     # Know about the supported languages and load the translation files
     @Languages = Object.keys(ledger.i18n.Languages)
     for tag in @Languages
       @loadTrad(tag)
 
-
-    # Manage text translation
-    @checkBoolUserFavLang()
-    .then =>
-      @loadUserFavLang() # @userFavLang <- Stores
-    .catch (err) =>
-      l err
-      @setUserFavLang() # @userFavLang -> Stores
-
-    #.then ->
-      # check if sync store === chrome store
-    .done()
-
-
-    # Manage date, time and currency converters
-    @checkBoolLocale()
-    .then =>
-      @loadLocale() # @userFavLocale <- Stores
-    .catch (err) =>
-      l err
-      @setLocale() # @userFavLocale -> Stores
-
-    #.then ->
-      # check if sync store === chrome store
-    .done()
+    initLangAndLocale = () =>
+      # Manage text translation
+      @checkBoolUserFavLang() # is Lang set into one of the store ?
+      .then (bool) =>
+        l bool, '@loadUserFavLang'
+        @loadUserFavLang(bool) # @userFavLang <- Stores
+      .catch (err) =>
+        l err
+        @setUserFavLangToStore() # @userFavLang -> Stores
+      .finally =>
+        @checkUserFavLangSyncStoreEqualsChromeStore()
+      .done()
+
+
+      # Manage date, time and currency converters
+      @checkBoolLocale() # is Locale set into one of the store ?
+      .then (bool) =>
+        l bool, '@loadLocale'
+        @loadLocale() # @userFavLocale <- Stores
+      .then =>
+        @checkLangAndLocaleCorrespondance()
+      .catch (err) =>
+        l err
+        @setLocaleToStore() # @userFavLocale -> Stores
+        @checkLangAndLocaleCorrespondance()
+
+      #.then ->
+        # check if sync store === chrome store
+      .done()
+
+    initLangAndLocale()
+    ledger.app.on('wallet:initialized', initLangAndLocale)
 
     cb()
 
 
 
   # General ####
+
+  ###
+    Check if sync Store values equals Chrome store values
+  ###
+  @checkUserFavLangSyncStoreEqualsChromeStore: () ->
+    deferred = Q.defer()
+
+    if ledger.storage.sync?
+      ledger.i18n.userFavLang.syncValue = undefined
+      ledger.i18n.userFavLang.chromeValue = undefined
+      ledger.storage.sync.get 'i18n_userFavLang', (r) ->
+        if Array.isArray(r.i18n_userFavLang)
+          r.i18n_userFavLang = r.i18n_userFavLang[0]
+        l r.i18n_userFavLang
+        userFavLangSync = r.i18n_userFavLang
+        deferred.resolve()
+      @chromeStore.get 'i18n_userFavLang', (r) ->
+        if Array.isArray(r.i18n_userFavLang)
+          r.i18n_userFavLang = r.i18n_userFavLang[0]
+        l r.i18n_userFavLang
+        userFavLangChrome = r.i18n_userFavLang
+        l userFavLangChrome
+        deferred.resolve()
+
+      l ledger.i18n.userFavLangSync
+      l ledger.i18n.userFavLangChrome
+      l ledger.i18n.userFavLangSync == ledger.i18n.userFavLangChrome
+
+    return deferred.promise
+
+
 
   ###
     Load user language of his Chrome browser UI version into @browserUiLang




  # User Favorite Locale ####

  ###
    Set user locale (region)

    @param [String] tag Codified (BCP 47) language tag - Official list here : http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry
  ###
  @setLocale: (tag) =>
    # If tag language is set manually
    if tag?
      if tag.length < 5
        throw new Error 'Tag language must be at least five characters. Use ledger.i18n.setUserFavLang() if you want to set the language without the region'
      if tag.substr(0, 2) isnt @userFavLang
        throw new Error 'You cannot set a locale which does not correspond to the user favorite language'
      @userFavLocale = tag
    else
      tag ?= @userFavLocale || @browserUiLang
      @userFavLocale = tag

    # set tag language to one of the store
    if ledger.storage.sync?
      ledger.storage.sync.set({i18n_userFavLocale: tag})
      @checkBoolLocale()
    else
      ledger.i18n.chromeStore.set({i18n_userFavLocale: tag})
      @checkBoolLocale()


  ###
    Set @userFavLang from browser accept languages
  ###
  @setUserFavLangToStoreFromBrowserAcceptLanguages: () ->
    # Select language tag without region
    i = 0
    l ledger.i18n.browserAcceptLanguages
    for str in ledger.i18n.browserAcceptLanguages
      if ledger.i18n.browserAcceptLanguages[i].length > 2
        i++
