/// <summary> /// Add a Locale to allow support for a specific language. /// </summary> /// <param name="locale"></param> public void AddLocale(Locale locale) { bool isPsedudoLocale = locale is PseudoLocale; if (!isPsedudoLocale) { var foundLocale = GetLocale(locale.Identifier); if (foundLocale != null && !(foundLocale is PseudoLocale)) { Debug.LogWarning("Ignoring locale. A locale with the same Id has already been added: " + locale.Identifier); return; } } // Insert PseudoLocale's at the end so they are not returned by GetLocale. if (isPsedudoLocale) { m_PseudoLocaleCount++; Locales.Add(locale); } else if (m_PseudoLocaleCount > 0) { Locales.Insert(0, locale); } else { Locales.Add(locale); } }
private void ReadLocalesFromManifest(Assembly hostAssembly) { Logger?.Invoke("Getting available locales..."); var localeResources = hostAssembly .GetManifestResourceNames() .Where(x => x.Contains($".{ResourceFolder}.")); var resourcesFilesList = localeResources.ToList(); string manifestFilePath = null; string resourcesFilePath = null; foreach (var file in resourcesFilesList) { if (file.EndsWith(_languageManifestFile)) { manifestFilePath = file; continue; } if (Path.GetFileNameWithoutExtension(file).EndsWith(Path.GetFileNameWithoutExtension(_resourcesFile))) { resourcesFilePath = file; } } if (manifestFilePath == null) { throw new I18NException("Language manifest file have not been found. Make sure you´ve got a " + $"'{_languageManifestFile}' file in folder " + $"called '{ResourceFolder}' containing embedded resource files " + "in the host assembly"); } if (resourcesFilePath == null) { throw new I18NException("Language resources file have not been found. Make sure you´ve got a " + $"'{_resourcesFile}' file in folder " + $"called '{ResourceFolder}' containing embedded resource files " + "in the host assembly"); } var manifestFileStream = HostAssembly.GetManifestResourceStream(manifestFilePath); var streamReader = new StreamReader(manifestFileStream); string locale; while ((locale = streamReader.ReadLine()) != null) { Locales.Add(locale, resourcesFilePath); } Logger?.Invoke($"Found {Locales.Count} locales: {string.Join(", ", Locales.Keys.ToArray())}"); }
public static void CopyFlexLocale(string locale) { if (string.IsNullOrEmpty(locale)) { return; } if (_localeEnUs == null) { return; } if (Locales.ContainsKey(locale)) { return; } Locales.Add(locale, _localeEnUs); }
private void DiscoverLocales(Assembly hostAssembly) { Logger?.Invoke("Getting available locales..."); var localeResources = hostAssembly .GetManifestResourceNames() .Where(x => x.Contains($".{ResourceFolder}.")); var supportedResources = (from name in localeResources from extension in _knownFileExtensions where name.EndsWith(extension) select name) .ToList(); if (supportedResources.Count == 0) { throw new I18NException("No locales have been found. Make sure you´ve got a folder " + $"called '{ResourceFolder}' containing embedded resource files " + $"(with extensions {string.Join(" or ", _knownFileExtensions)}) " + "in the host assembly"); } foreach (var resource in supportedResources) { var parts = resource.Split('.'); var localeName = parts[parts.Length - 2]; if (Locales.ContainsKey(localeName)) { throw new I18NException($"The locales folder '{ResourceFolder}' contains a duplicated locale '{localeName}'"); } Locales.Add(localeName, resource); } Logger?.Invoke($"Found {supportedResources.Count} locales: {string.Join(", ", Locales.Keys.ToArray())}"); }