public async Task Initialize() { if (this.IsLoading) { return; } this.IsLoading = true; if ((null == _languageDefault) || (null == _languageCurrent)) { // default language file path string defaultPath = Path.Combine(Package.Current.InstalledLocation.Path, "default-en-US.json"); try { // try to open and read it StorageFile defaultFile = await StorageFile.GetFileFromPathAsync(defaultPath); string fileContents = await FileIO.ReadTextAsync(defaultFile); // if we got some data if (!String.IsNullOrWhiteSpace(fileContents)) { // deserialize it _languageDefault = JsonConvert.DeserializeObject <LanguageFile>(fileContents); } } catch (FileNotFoundException) { } // if we failed to load the defaults if (null == _languageDefault) { // create them _languageDefault = LanguageFile.CreateDefault(); } // find the first language file we can and load that as the current language IReadOnlyList <StorageFile> files = null; try { // file spec pattern; language files all start with SDA- string startsWith = "SDA-"; // get the config object ConfigurationService configurationService = (ConfigurationService)SimpleIoc.Default.GetInstance <ConfigurationService>(); if (null != configurationService) { // is a language specified? if (!String.IsNullOrWhiteSpace(configurationService.Configuration.Language)) { // add the language to the file spec (e.g. en-US, en-CA, fr-CA) startsWith += configurationService.Configuration.Language; } // get the folder where our language files are stored StorageFolder queryFolder = await configurationService.GetLocalStorageFolder(); // build query for json files QueryOptions options = new QueryOptions(CommonFileQuery.OrderByName, new List <string>() { ".json" }); StorageFileQueryResult query = queryFolder.CreateFileQueryWithOptions(options); // execute the query files = await query.GetFilesAsync(); // if we got results if ((null != files) && (files.Count > 0)) { // loop through them foreach (StorageFile file in files) { // find the first that matches our app prefix and optional language spec if (file.Name.StartsWith(startsWith, StringComparison.InvariantCultureIgnoreCase)) { // read its contents string fileContents = await FileIO.ReadTextAsync(file); // deserialize into our language object _languageCurrent = JsonConvert.DeserializeObject <LanguageFile>(fileContents); // set the language code of this file // filename format spec is "SDA-<ISO LANGUAGE (2)>-<ISO COUNTRY (2)>.json" string name = file.Name; if (name.Length > 4) { // remove "SDA-" name = name.Substring(4); } // find the .json extension int crop = name.IndexOf(".json"); if (-1 != crop) { // crop it off name = name.Substring(0, crop); } // save our name and break out of the foreach this.LanguageCode = name; break; } } } } } catch (Exception ex) { } // if we failed to load the current language if (null == _languageCurrent) { // set it to the default _languageCurrent = _languageDefault; } } this.IsLoaded = true; this.IsLoading = false; }