/// <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);
            }
        }
Exemple #2
0
        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())}");
        }
Exemple #3
0
 public static void CopyFlexLocale(string locale)
 {
     if (string.IsNullOrEmpty(locale))
     {
         return;
     }
     if (_localeEnUs == null)
     {
         return;
     }
     if (Locales.ContainsKey(locale))
     {
         return;
     }
     Locales.Add(locale, _localeEnUs);
 }
Exemple #4
0
        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())}");
        }