From 63914efb064c3430749de89d4f69c5c95b1a5dc9 Mon Sep 17 00:00:00 2001
From: Federico Fissore <f.fissore@arduino.cc>
Date: Wed, 2 Oct 2013 17:34:09 +0200
Subject: [PATCH] Fixed locale selection

---
 app/src/processing/app/I18n.java | 35 +++++++++++++++++++-------------
 1 file changed, 21 insertions(+), 14 deletions(-)

diff --git a/app/src/processing/app/I18n.java b/app/src/processing/app/I18n.java
index d87442c0a..21021fa85 100644
--- a/app/src/processing/app/I18n.java
+++ b/app/src/processing/app/I18n.java
@@ -13,8 +13,10 @@
 
 package processing.app;
 
-import java.util.*;
 import java.text.MessageFormat;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
 
 public class I18n {
   // start using current locale but still allow using the dropdown list later
@@ -28,16 +30,21 @@ public class I18n {
   static String PROMPT_OK;
   static String PROMPT_BROWSE;
 
-  static protected void init (String language) throws MissingResourceException {
+  static protected void init(String language) throws MissingResourceException {
     // there might be a null pointer exception ... most likely will never happen but the jvm gets mad
     try {
-      if (language != null && language.trim().length() > 0) {
-        Locale locale = new Locale(language);
-        i18n = ResourceBundle.getBundle("processing.app.i18n.Resources", locale);
-        Locale.setDefault(locale);
-      } else {
-        i18n = ResourceBundle.getBundle("processing.app.i18n.Resources", Locale.getDefault());
+      String[] languageParts = language.split("_");
+      Locale locale = Locale.getDefault();
+      // both language and country
+      if (languageParts.length == 2) {
+        locale = new Locale(languageParts[0], languageParts[1]);
+        // just language
+      } else if (languageParts.length == 1 && !"".equals(languageParts[0])) {
+        locale = new Locale(languageParts[0]);
       }
+      // there might be a null pointer exception ... most likely will never happen but the jvm gets mad
+      Locale.setDefault(locale);
+      i18n = ResourceBundle.getBundle("processing.app.i18n.Resources", Locale.getDefault());
       PROMPT_YES = _("Yes");
       PROMPT_NO = _("No");
       PROMPT_CANCEL = _("Cancel");
@@ -54,18 +61,18 @@ public class I18n {
     } catch (MissingResourceException e) {
       res = s;
     }
-    
+
     // The single % is the arguments selector in .PO files.
     // We must put double %% inside the translations to avoid
     // getting .PO processing in the way.
     res = res.replace("%%", "%");
-    
+
     return res;
   }
 
-  public static String format(String fmt, Object ... args) {
+  public static String format(String fmt, Object... args) {
     // Single quote is used to escape curly bracket arguments.
-    
+
     // - Prevents strings fixed at translation time to be fixed again
     fmt = fmt.replace("''", "'");
     // - Replace ' with the escaped version ''
@@ -73,10 +80,10 @@ public class I18n {
 
     return MessageFormat.format(fmt, args);
   }
-  
+
   /**
    * Does nothing.
-   * 
+   * <p/>
    * This method is an hack to extract words with gettext tool.
    */
   protected static void unusedStrings() {