/// <summary> /// Adds the localizations. /// </summary> /// <param name="localizations">The localizations.</param> /// <param name="loadMode">The load mode.</param> /// <param name="conflictResolution">The conflict resolution.</param> /// <exception cref="DuplicateNameException">A localization already exists in [{Locale}] for the key [{localization.Key}]!</exception> internal void AddLocalizations(Dictionary <string, string> localizations, LocalizationLoadMode loadMode = LocalizationLoadMode.Truncate, ConflictResolution conflictResolution = ConflictResolution.RaiseException) { if (loadMode == LocalizationLoadMode.Truncate) { ClearCache(); } foreach (var localization in localizations) { switch (conflictResolution) { case ConflictResolution.Override: _cache[localization.Key] = localization.Value; break; case ConflictResolution.RaiseException: case ConflictResolution.Skip: if (_cache.ContainsKey(localization.Key)) { if (conflictResolution == ConflictResolution.RaiseException) { throw new DuplicateNameException($"A localization already exists in [{Locale}] for the key [{localization.Key}]!"); } break; } _cache[localization.Key] = localization.Value; break; } } }
/// <summary> /// Adds the localizations. /// </summary> /// <param name="localizations">The localizations.</param> /// <param name="locale">The locale. Defaults to the CurrentLocale.</param> /// <param name="loadMode">The load mode. Defaults to LocalizationLoadMode.Truncate.</param> /// <param name="conflictResolution">The conflict resolution. Defaults to ConflictResolution.RaiseException.</param> /// <exception cref="KeyNotFoundException">The locale [{actualLocale}] does not exist!</exception> public void AddLocalizations(Dictionary <string, string> localizations, string locale = null, LocalizationLoadMode loadMode = LocalizationLoadMode.Truncate, ConflictResolution conflictResolution = ConflictResolution.RaiseException) { // let's make sure we have a locale to load to... var actualLocale = GetAndCheckActualLocale(locale); // assign the loaded localizations as required _locales[actualLocale.Item1].AddLocalizations(localizations, loadMode, conflictResolution); }
/// <summary> /// Loads the localization. /// </summary> /// <param name="file">The file.</param> /// <param name="locale">The locale. Defaults to the CurrentLocale.</param> /// <param name="loadMode">The load mode. Defaults to LocalizationLoadMode.Truncate.</param> /// <param name="conflictResolution">The conflict resolution. Defaults to ConflictResolution.RaiseException.</param> /// <param name="enableMachineTranslation">Whether to enable machine translations.</param> /// <exception cref="KeyNotFoundException">The locale [{actualLocale}] does not exist!</exception> public void LoadLocalization(Stream file, string locale = null, bool autoAddLocale = false, LocalizationLoadMode loadMode = LocalizationLoadMode.Truncate, ConflictResolution conflictResolution = ConflictResolution.RaiseException, bool enableMachineTranslation = false) { if (LocalizationLoader == null) { throw new Exception("Localization loader is not configured! Please create a localization loader when initializing the LocalizationSystem or attach it to the LocalizationSystem.Localization property."); } // let's make sure we have a locale to load to... var actualLocale = GetAndCheckActualLocale(locale, !autoAddLocale); if (!actualLocale.Item2 && autoAddLocale) { AddLanguage(actualLocale.Item1, DefaultLocalization, ConflictResolution.Skip, enableMachineTranslation); } // run the loader against the file contents var localizations = LocalizationLoader.LoadLocalizationFromFile(file); // assign the loaded localizations as required AddLocalizations(localizations, actualLocale.Item1, loadMode, conflictResolution); }