diff --git a/GreenshotConfluencePlugin/ConfluenceDestination.cs b/GreenshotConfluencePlugin/ConfluenceDestination.cs index c373a0ed7..09fd11377 100644 --- a/GreenshotConfluencePlugin/ConfluenceDestination.cs +++ b/GreenshotConfluencePlugin/ConfluenceDestination.cs @@ -66,9 +66,9 @@ namespace GreenshotConfluencePlugin { public override string Description { get { if (page == null) { - return Language.GetString(LangKey.upload_menu_item); + return Language.GetString("confluence", LangKey.upload_menu_item); } else { - return Language.GetString(LangKey.upload_menu_item) + ": \"" + page.Title + "\""; + return Language.GetString("confluence", LangKey.upload_menu_item) + ": \"" + page.Title + "\""; } } } @@ -173,11 +173,11 @@ namespace GreenshotConfluencePlugin { Process.Start(page.Url); } catch {} } else { - System.Windows.MessageBox.Show(Language.GetString(LangKey.upload_success)); + System.Windows.MessageBox.Show(Language.GetString("confluence", LangKey.upload_success)); } return true; } catch(Exception e) { - System.Windows.MessageBox.Show(Language.GetString(LangKey.upload_failure) + " " + e.Message); + System.Windows.MessageBox.Show(Language.GetString("confluence", LangKey.upload_failure) + " " + e.Message); } return false; } diff --git a/GreenshotConfluencePlugin/ConfluencePlugin.cs b/GreenshotConfluencePlugin/ConfluencePlugin.cs index b4a421f79..01da4061b 100644 --- a/GreenshotConfluencePlugin/ConfluencePlugin.cs +++ b/GreenshotConfluencePlugin/ConfluencePlugin.cs @@ -65,7 +65,7 @@ namespace GreenshotConfluencePlugin { confluenceConnector.login(); } } catch (Exception e) { - MessageBox.Show(Language.GetFormattedString(LangKey.login_error, e.Message)); + MessageBox.Show(Language.GetFormattedString("confluence", LangKey.login_error, e.Message)); } return confluenceConnector; } diff --git a/GreenshotConfluencePlugin/Support/LanguageXMLTranslationProvider.cs b/GreenshotConfluencePlugin/Support/LanguageXMLTranslationProvider.cs index c85a5b44e..403126ceb 100644 --- a/GreenshotConfluencePlugin/Support/LanguageXMLTranslationProvider.cs +++ b/GreenshotConfluencePlugin/Support/LanguageXMLTranslationProvider.cs @@ -32,8 +32,8 @@ namespace TranslationByMarkupExtension { /// See /// public object Translate(string key) { - if (Language.hasKey(key)) { - return Language.GetString(key); + if (Language.hasKey("confluence", key)) { + return Language.GetString("confluence", key); } return key; } diff --git a/GreenshotConfluencePlugin/Support/TranslationManager.cs b/GreenshotConfluencePlugin/Support/TranslationManager.cs index 1f2284dc5..b87d9a0cc 100644 --- a/GreenshotConfluencePlugin/Support/TranslationManager.cs +++ b/GreenshotConfluencePlugin/Support/TranslationManager.cs @@ -4,66 +4,52 @@ using System.Globalization; using System.Linq; using System.Threading; -namespace TranslationByMarkupExtension -{ - public class TranslationManager - { +namespace TranslationByMarkupExtension { + public class TranslationManager { private static TranslationManager _translationManager; public event EventHandler LanguageChanged; - public CultureInfo CurrentLanguage - { + public CultureInfo CurrentLanguage { get { return Thread.CurrentThread.CurrentUICulture; } - set - { - if( value != Thread.CurrentThread.CurrentUICulture) - { + set { + if( value != Thread.CurrentThread.CurrentUICulture) { Thread.CurrentThread.CurrentUICulture = value; OnLanguageChanged(); } } } - public IEnumerable Languages - { - get - { - if( TranslationProvider != null) - { + public IEnumerable Languages { + get { + if( TranslationProvider != null) { return TranslationProvider.Languages; } return Enumerable.Empty(); } } - public static TranslationManager Instance - { - get - { - if (_translationManager == null) - _translationManager = new TranslationManager(); + public static TranslationManager Instance { + get { + if (_translationManager == null) { + _translationManager = new TranslationManager(); + } return _translationManager; } } public ITranslationProvider TranslationProvider { get; set; } - private void OnLanguageChanged() - { - if (LanguageChanged != null) - { + private void OnLanguageChanged() { + if (LanguageChanged != null) { LanguageChanged(this, EventArgs.Empty); } } - public object Translate(string key) - { - if( TranslationProvider!= null) - { - object translatedValue =TranslationProvider.Translate(key); - if( translatedValue != null) - { + public object Translate(string key) { + if( TranslationProvider != null) { + object translatedValue = TranslationProvider.Translate(key); + if( translatedValue != null) { return translatedValue; } } diff --git a/GreenshotPlugin/Core/Language.cs b/GreenshotPlugin/Core/Language.cs index 38e90ab33..e903346d3 100644 --- a/GreenshotPlugin/Core/Language.cs +++ b/GreenshotPlugin/Core/Language.cs @@ -42,7 +42,8 @@ namespace GreenshotPlugin.Core { private const string HELP_FILENAME_PATTERN = @"help-*.html"; private const string LANGUAGE_FILENAME_PATTERN = @"language*.xml"; private static Regex PREFIX_REGEXP = new Regex(@"language_([a-zA-Z0-9]+).*"); - private static Regex IETF_REGEXP = new Regex(@"[^a-zA-Z]+"); + private static Regex IETF_CLEAN_REGEXP = new Regex(@"[^a-zA-Z]+"); + private static Regex IETF_REGEXP = new Regex(@"^.*([a-zA-Z]{2}-[a-zA-Z]{2})\.xml$"); private const string LANGUAGE_GROUPS_KEY = @"SYSTEM\CurrentControlSet\Control\Nls\Language Groups"; private static List unsupportedLanguageGroups = new List(); private static IDictionary resources = new Dictionary(); @@ -143,7 +144,7 @@ namespace GreenshotPlugin.Core { /// /// private static void LoadFiles(string ietf) { - ietf = ClearIETF(ietf); + ietf = ReformatIETF(ietf); if (!languageFiles.ContainsKey(ietf)) { LOG.ErrorFormat("No language {0} available.", ietf); return; @@ -173,27 +174,14 @@ namespace GreenshotPlugin.Core { return currentLanguage; } set { - string ietf = ClearIETF(value); - LOG.DebugFormat("CurrentLangue = {0}, new value {1} ({2})", currentLanguage, value, ietf); - if (!string.IsNullOrEmpty(ietf)) { - if (!languageFiles.ContainsKey(ietf)) { - LOG.WarnFormat("Unknown language {0}, trying best match!", ietf); - foreach (string availableIETF in languageFiles.Keys) { - if (availableIETF.StartsWith(ietf)) { - LOG.InfoFormat("Found language {0}, best match for!", availableIETF, ietf); - ietf = availableIETF; - break; - } - } - } - if (!languageFiles.ContainsKey(ietf)) { - LOG.WarnFormat("No match for language {0} found!", ietf); - } else { - if (currentLanguage == null || !currentLanguage.Equals(ietf)) { - currentLanguage = ietf; - Reload(); - return; - } + string ietf = FindBestIETFMatch(value); + if (!languageFiles.ContainsKey(ietf)) { + LOG.WarnFormat("No match for language {0} found!", ietf); + } else { + if (currentLanguage == null || !currentLanguage.Equals(ietf)) { + currentLanguage = ietf; + Reload(); + return; } } LOG.Debug("CurrentLanguage not changed!"); @@ -201,16 +189,46 @@ namespace GreenshotPlugin.Core { } /// - /// This helper method clears all non alpha characters from the IETF, and does a tolower. - /// So only "dede" or "enus" is left, this prevents problems with multiple formats or typos. + /// Try to find the best match for the supplied IETF + /// + /// + /// IETF + private static string FindBestIETFMatch(string inputIETF) { + string returnIETF = inputIETF; + if (string.IsNullOrEmpty(returnIETF)) { + returnIETF = DEFAULT_LANGUAGE; + } + returnIETF = ReformatIETF(returnIETF); + if (!languageFiles.ContainsKey(returnIETF)) { + LOG.WarnFormat("Unknown language {0}, trying best match!", returnIETF); + if (returnIETF.Length == 5) { + returnIETF = returnIETF.Substring(0, 2); + } + foreach (string availableIETF in languageFiles.Keys) { + if (availableIETF.StartsWith(returnIETF)) { + LOG.InfoFormat("Found language {0}, best match for!", availableIETF, returnIETF); + returnIETF = availableIETF; + break; + } + } + } + return returnIETF; + } + + /// + /// This helper method clears all non alpha characters from the IETF, and does a reformatting. + /// This prevents problems with multiple formats or typos. /// /// /// - private static string ClearIETF(string inputIETF) { + private static string ReformatIETF(string inputIETF) { string returnIETF = null; if (!string.IsNullOrEmpty(inputIETF)) { returnIETF = inputIETF.ToLower(); - returnIETF = IETF_REGEXP.Replace(returnIETF, ""); + returnIETF = IETF_CLEAN_REGEXP.Replace(returnIETF, ""); + if (returnIETF.Length == 4) { + returnIETF = returnIETF.Substring(0, 2) + "-" + returnIETF.Substring(2, 2).ToUpper(); + } } return returnIETF; } @@ -293,7 +311,9 @@ namespace GreenshotPlugin.Core { languageFile.Filepath = languageFilePath; XmlNode node = nodes.Item(0); languageFile.Description = node.Attributes["description"].Value; - languageFile.Ietf = ClearIETF(node.Attributes["ietf"].Value); + if (node.Attributes["ietf"] != null) { + languageFile.Ietf = ReformatIETF(node.Attributes["ietf"].Value); + } if (node.Attributes["version"] != null) { languageFile.Version = new Version(node.Attributes["version"].Value); } @@ -333,6 +353,18 @@ namespace GreenshotPlugin.Core { if (languageFile == null) { continue; } + if (string.IsNullOrEmpty(languageFile.Ietf)) { + LOG.WarnFormat("Fixing missing ietf in language-file {0}", languageFilepath); + string languageFilename = Path.GetFileName(languageFilepath); + if (IETF_REGEXP.IsMatch(languageFilename)) { + string replacementIETF = IETF_REGEXP.Replace(languageFilename, "$1"); + languageFile.Ietf = ReformatIETF(replacementIETF); + LOG.InfoFormat("Fixed IETF to {0}", languageFile.Ietf); + } else { + LOG.ErrorFormat("Missing ietf , no recover possible... skipping language-file {0}!", languageFilepath); + continue; + } + } // Check if we can display the file if (!string.IsNullOrEmpty(languageFile.LanguageGroup) && unsupportedLanguageGroups.Contains(languageFile.LanguageGroup)) { @@ -393,7 +425,7 @@ namespace GreenshotPlugin.Core { foreach (string helpFilepath in Directory.GetFiles(languagePath, HELP_FILENAME_PATTERN, SearchOption.AllDirectories)) { LOG.DebugFormat("Found help file: {0}", helpFilepath); string helpFilename = Path.GetFileName(helpFilepath); - string ietf = ClearIETF(helpFilename.Replace(".html", "").Replace("help-", "")); + string ietf = ReformatIETF(helpFilename.Replace(".html", "").Replace("help-", "")); if (!helpFiles.ContainsKey(ietf)) { helpFiles.Add(ietf, helpFilepath); } else {