From c287f34bd37427f81d6e7a7e0604e998554348be Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Mon, 19 Apr 2010 07:59:06 -0400
Subject: [PATCH] - Fix setting spellcheck languages with extended codes (#1486605)

---
 CHANGELOG                      |    1 +
 program/steps/mail/compose.inc |   30 +++++++++++++++++++++++++-----
 2 files changed, 26 insertions(+), 5 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 0f3c1d0..fdfaf29 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 CHANGELOG RoundCube Webmail
 ===========================
 
+- Fix setting spellcheck languages with extended codes (#1486605)
 - Fix messages list scrolling in FF3.6 (#1486472)
 - Fix quicksearch input focus (#1486637)
 - Always set changed date when flagging a DB record as deleted + provide a cleanup script
diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc
index 2fac294..bc7cd89 100644
--- a/program/steps/mail/compose.inc
+++ b/program/steps/mail/compose.inc
@@ -522,16 +522,36 @@
   // include GoogieSpell
   if (!empty($CONFIG['enable_spellcheck'])) {
 
-    $lang = strtolower(substr($_SESSION['language'], 0, 2));
-  
-    $spellcheck_langs = (array)$RCMAIL->config->get('spellcheck_languages', array('da'=>'Dansk', 'de'=>'Deutsch', 'en' => 'English', 'es'=>'Español', 'fr'=>'Français', 'it'=>'Italiano', 'nl'=>'Nederlands', 'pl'=>'Polski', 'pt'=>'Português', 'fi'=>'Suomi', 'sv'=>'Svenska'));
+    $engine = $RCMAIL->config->get('spellcheck_engine','googie');
+    $spellcheck_langs = (array) $RCMAIL->config->get('spellcheck_languages',
+      array('da'=>'Dansk', 'de'=>'Deutsch', 'en' => 'English', 'es'=>'Español',
+            'fr'=>'Français', 'it'=>'Italiano', 'nl'=>'Nederlands', 'pl'=>'Polski',
+            'pt'=>'Português', 'fi'=>'Suomi', 'sv'=>'Svenska'));
+
+    // googie works only with two-letter codes
+    if ($engine == 'googie') {
+      $lang = strtolower(substr($_SESSION['language'], 0, 2));
+
+      $spellcheck_langs_googie = array();
+      foreach ($spellcheck_langs as $key => $name)
+        $spellcheck_langs_googie[strtolower(substr($key,0,2))] = $name;
+        $spellcheck_langs = $spellcheck_langs_googie;
+    }
+    else {
+      $lang = $_SESSION['language'];
+
+      // if not found in the list, try with two-letter code
+      if (!$spellcheck_langs[$lang])
+        $lang = strtolower(substr($lang, 0, 2));
+    }
+
     if (!$spellcheck_langs[$lang])
       $lang = 'en';
-    
+
     $editor_lang_set = array();
     foreach ($spellcheck_langs as $key => $name) {
       $editor_lang_set[] = ($key == $lang ? '+' : '') . JQ($name).'='.JQ($key);
-      }
+    }
     
     $OUTPUT->include_script('googiespell.js');
     $OUTPUT->add_script(sprintf(

--
Gitblit v1.9.1