diff --git a/gui/scripts/syncthing/core/services/localeService.js b/gui/scripts/syncthing/core/services/localeService.js index b594ed204..fe4ea3a09 100644 --- a/gui/scripts/syncthing/core/services/localeService.js +++ b/gui/scripts/syncthing/core/services/localeService.js @@ -2,8 +2,23 @@ angular.module('syncthing.core') .provider('LocaleService', function () { 'use strict'; + function detectLocalStorage() { + // Feature detect localStorage; https://mathiasbynens.be/notes/localstorage-pattern + try { + var uid = new Date(); + var storage = window.localStorage; + storage.setItem(uid, uid); + var success = storage.getItem(uid) == uid; + storage.removeItem(uid); + return storage; + } catch (exception) { + return undefined; + } + } + var _defaultLocale, - _availableLocales; + _availableLocales, + _localStorage = detectLocalStorage(); var _SYNLANG = "SYN_LANG"; // const key for localStorage @@ -18,6 +33,7 @@ angular.module('syncthing.core') _availableLocales = locales; }; + this.$get = ['$http', '$translate', '$location', function ($http, $translate, $location) { /** @@ -32,22 +48,10 @@ angular.module('syncthing.core') } function autoConfigLocale() { - // Feature detect localStorage; https://mathiasbynens.be/notes/localstorage-pattern - var storage; - var fail; - var uid; - try { - uid = new Date; - (storage = window.localStorage).setItem(uid, uid); - fail = storage.getItem(uid) != uid; - storage.removeItem(uid); - fail && (storage = false); - } catch (exception) {} - var params = $location.search(); var savedLang; - if (storage) { - savedLang = storage[_SYNLANG]; + if (_localStorage) { + savedLang = _localStorage[_SYNLANG]; } if(params.lang) { @@ -99,8 +103,8 @@ angular.module('syncthing.core') function useLocale(language, save2Storage) { if (language) { $translate.use(language).then(function () { - if (save2Storage && typeof(localStorage) != 'undefined') - localStorage[_SYNLANG] = language; + if (save2Storage && _localStorage) + _localStorage[_SYNLANG] = language; }); } } diff --git a/internal/auto/gui.files.go b/internal/auto/gui.files.go index 850b336a7..799d51ee8 100644 --- a/internal/auto/gui.files.go +++ b/internal/auto/gui.files.go @@ -5,7 +5,7 @@ import ( ) const ( - AssetsBuildDate = "Thu, 16 Apr 2015 14:26:49 GMT" + AssetsBuildDate = "Thu, 16 Apr 2015 14:40:42 GMT" ) func Assets() map[string][]byte { @@ -109,7 +109,7 @@ func Assets() map[string][]byte { assets["scripts/syncthing/core/module.js"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/0rMSy/NSSzSy81PKc1J1VAvrsxLLsnIzEvXS84vSlXXUYiO1bTmAgAAAP//AQAA//+OUhsnJgAAAA==") - assets["scripts/syncthing/core/services/localeService.js"], _ = base64.StdEncoding.DecodeString("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") + assets["scripts/syncthing/core/services/localeService.js"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/5QZa3PbNvJ7fgXG06nl1pb1oCQrudyUDymXqet0It+0l6TjgShIQkWRKgDKVjr+77e7IEVSou2UH2Bosdhd7BswjxdpxFVznczSSDRO9S4OzVLGi2aYKHF69orB19yoZCtnQjVOr5OQR2Ii1FaG4vSczVPAl0nMGmfsb0LG7zTVgmmjZGhO37zag/fIM2FEaIjWxCSKL0RlO36Xl2wsuEmVyLBZVEJ/w5bGbPTry8s1B3G5nu5iEevmVFzGiRH6kpC1Rb7YcGOEiiv0jdodcMRvyxVL5Yy9ZbG4ZwE3INibWqyMNmDey3iW3Dcr4h1tydCbWpj3RqwbwOQcOT1FPQ1DoTVQzzcuio1n7O1b3Ps0FyXWyVbs8Y8RlQDNxjl+df2RhdyES9YQD6HYoL0ObVOikMYzMZexOBDm8VUxe1U+2B2g8zSythfnlU13fMtlxKeRsKv6YLmsYdBMnRO9OeA2+d/NtXvzDrBPYHqH85M36FthEmvDVmLH5omquFZBAdBibuRWwJ+10CyZW0SY/gmi6lDJjWFCh3wjZlW+1x9893o0ubtxfxlNgPvf7ITPT16zE3eu5IrzWJ+cA2iNoC9pu+O2cGx7OHYCHIceYSiL0ep3Bjg6Do7dIY1tgl8R3KX5kPbobM/wqoejhxhDd4Sj36L5mOA+jSO7x5B0GowqeZwibCoyOk4bOTndHo0ejUjHcezYpdHiuKXVMVFZVKk4bolK94hWmcoV7Y/z07iZvHSyDs07xQmm8cX7m5dRWYPWg2LdsypxzohKkpEY9/o4Dnyao1TjFso87tN8gOTGTof2kI08Jb4uk1gsLOghF6VDojgezdt2TihkJS/R4AsriZCQI8TnhkeA1hq1LPBiCx4Xh/JwlTWyhS8PoxYJH+aGb7cCgX/6bSNjTks7XPpNRHp56e/Wils5Z0Q0QBHoJ1k8EKnR4ZIAi2R/jnZxjjb64pDsNnRIzNnXXG990ozrFdojn82057QRW0QZdneIPtX1vNI4oDGgcUgjekPX9WlnfPHOw82jeBFJDUnqnXdmF0rQDPOTW8H85FpMOtJIb4TisUkIpO9GkwzKUbvjdhKxRvGL250UIyOhjYTMAYdAWEqwVK+4Ik3PeR6xTruIWxur5O99h6J0LhFvkiZrMv6cnGgMIoE5B1xSflgQrXdcyGghCDAjAFpczpaRJCMuIosViQWdZpFmErhD5O36bZqjLVxydpcc33UdWiX7LfNY743Qfr2gTfMrmg9p7hKezP2BctCwS5mEctDQoaDq9AuvWNKh/qO23GQ+viTZfuGLHWQ2+C3pQB5fcs3Ze6ijsdCS9CitMz/4gQYvB/USkCzwHmIAkhQd9s9M3f3eCFypP8Bwu3KHlBJW2Vq7hWsQFC2a0xgMaN6luUsjpZvVKk9Xw1Iq6w6K+ZBSl3NlIbQnT+ODqzaOQQfH4RWOvp27Fk9dXHNDnvpzqmbklRFUGCjEVEvIy1Z5wvMpOHwXOfl+UMxdCqJVcvfzR4sa9HpwbDfoA5Lf8xy7nJ9k2O4VodvqFJBOtzDVKssd4xFqYzzCojEejRwcx10csYDgHLGjKWJfgx965quYpkItRJYyojxjjIboZSNKvCPXLc17pfmA9pBZryW0FFuJiWvQZSseTcnm0ZYWudnKLKlRdVrzvSt2KI+TRYadXuGW3U5xvvXerl2/ZFe3VNgcGkc0BvXFaJ0nroB4BsQh6IxpbiGo06BFhWEdH/As0c5Kn4V4Fnt/oKxW04GuBrY8HUJsQfPJqK4VTlUVYvMzsRh2Srl6vcvDoj2k0cGxOywgGETtVqtn57gnntpqtVpT8elR7ovFnqFNACRYxy3Yli0Qk+5uBFwjIh7PKMHFpKGbXZwoW4FiOsPNDDxrOMUhwoFWNDnWROjELBMG6eJaTBPykCTElQ9hKA2PCbC2rRb0WeyDStaUKZJcPV4bde9RQfPIMh75i9fqI96GF42ES4dxB5Q125RB6WAuVXXXHmxDB/s1ibIctzH2tzLpIgXxXW2hF97HwwXW8BTXMjrLMH69Pcawv7jFUcndxw+I8zGxlujEGBOtLmsUEGnLlcrrgNM56tOqrk0jaVndU3KS8Y5/vAcrkX51SSNDws7SSLeU97MkQyml45TCMrAkTB2BLFqPfEXP8myEbg55aEAZiNpeKl59n9xS5yET+BR3AcUjdXyBj0IEnmVv68xEzvjaHonSwSSCW5JVYJA1SjqqLlC7V1r+i5aXf8kN/cx9KlerzSrj+uyhi/Q/URvwFkbJX4bgr7isrYyTe4ASwJQ8ngCUCifbfT3U9xe3n6zF9D1fyoj2mbwF8ShteJROPI983COIT1oxefz6ZDDfwdLtkx18kt6nRs+3TZvZN/JOp8hd3qDkQnTWEVUIs8zLADnfiKiOOsNiTm3hiDiMOpQvM9UIA2ex6jak39svD2NfrbAxoi7IkKJ+l0Yn8cLimQPZWkfzFiuByjeZHhJIF7nDXZGT+eRwY3I+f1xA6OLQv0JF9QO7c19YOt1CCZkj0NgbfDkoKY5fcg1y+DTvn52eLQl2T/neRS3Elkx2q5eS/LM9andJAVsKhFuJIG8cL9iWpv7A4OoDGeO9lr8v4b6BkK/LCz8LaWeEF85+72qAd6OBdwVCO+Ne9yzDu/2tDq/v9eG4cJGy96avacbhUxqlJ+yxdA83S6nx2SMoX/zhSly8HNlL9eEjQ/WlADZYtOKdoY6Je/CCUMNHHzE6fHbY89JVZlVu3y2EAczPp9/hU9TpOTv9zkD7riGmBf1CGsi48kpGyOesQIV5joiCVd/Afvih+u7yA/so/krhAqJBBsG0UFuhGPSPiYKyykzCUChcmqrkHpZPNVN2h5hlh6J3uXihmwekDzn9ZF94NNtABZVasPulDJcMDpE/TinITNEW9HUvzZLx/eMIV4rvDshdVn7v9aEEn3lW1Ez5Rw+BpIhL9tPth+DDaxYuRbhico6HVIJJzSB/gmx8h6dPDaTAryJ/kov5Vi64SVQzwndOvsBHHMW0XAMaV4xvZPPVUy9bZCl8dmukClpRUMCP7ORSb8NLJHZydvjgVX9AnprET+K5XNjz1R4Pn4w2cH9co+vt3QH8matw+eQDJN+K2TWIcrwM6mlUXsvqmOK3pwF8Kxs+5y9nfxxTfzxWmZw3rPyk6Ke4pTqLsDLyOTMqFTVnfGQiAqXjWfZivky5QH2SYj2JOk9sZp7eKOUQIH2UQcofvluD91EQzqXShuW+h3GK0EgCMHtRn7HpjoCpDdYsbJ+jbpbcoN9zoCHm8gGfJXnB5F6wJeiA7ZNak93aHfaV5DnSWsQmFyiTBEIpitiaHoRxO8YPvq38dwJpHzIC5JOsSBDmc9QtkSSOdvst0GGyODF5PaoJxvxDj5fnTy7jR970LAZJIF/CivKCU61Ab54WDp+QGxJ2tN4wyf5FkoB3i3hhlgD58cfnHCYXHasO7vss/3iGFX4YEoiacQCGnZcY4BcmMXSbac0/J8pfTXSXv1yFqJ7Dutmcy8gIVYqWTaK1RIRnYrf8gZfcYoSgHrI8XITIJdQbc2nXgF9kXXNKcRUl989ETYl8CIm8yX4ToI01ZCGBVYOCEgngIoOKqlH4ZG4XssD6JuLJrBSAUBdFFDVf3FhWEqi1/LNpkmsUzAfB6urA4YeeUdmfeci/WclfvsUQ+GV1sEIPMpt4+DBv2DT/9i26/IvEns27T3CNytyqbvStXJ9387NvCLLc2fdqfMva36K9fQbJCXxu1dTRw28KJWj1UnD+8xUsSBAtU277Jki3FL8kWunfVodfUVKz9rxesse6OvtNnVGJQRZi59SPdJ7pWfLMlz7d0xSddRM4FNhNCOa4Uf/v6houZUnY999Xu6OzZ430RCOV5fe09t/DpKh/qsosVI7Pcdh0vj6CHFfAvTleF9NjLGiH/VQp6BNy5FyjqNB961y1wRl7rKV0eFmrJ3Z8Paunlq0GUm8ivrvB/9g+QbD6z9lDFe9neRlGu/wfAAD//wEAAP//NZVcxichAAA=") assets["vendor/angular/angular-translate-loader.min.js"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/0SPsW4iMRCG+3sKM0I6W7L8AKCrTtw16ZIOURh7nDXx2pvxLAQtvHucJZBuPP413/fb/DomS6YvfkwoYbDV2TQQuo4Nk801WUZQJljHhc4Slo/tM1uO7l9MWJ+K9Uigt7B8Bw3LjnkAHcbsOJYsrd6riZBHyuKxdGqKQS7c5bJwphFD/JjHOoY2Ku6onETGk9gQFZLwt4zJ598sUoOJOsNF+KJrkYu4XRCFxO2AqAO6GCL6Baj10ZLwf6zxGJCkWn/L7OU0Ulpt7wLamTc867vEzhxKzBJA6R65K34F/zcvoAdLtq8rgKtqSeewVvlTVk3eENaSjtgeLYJzgUfg9n9Ax3LGtYj2TaD0seL1ulPrX58AAAD//wEAAP//1rAncZcBAAA=")