diff options
Diffstat (limited to 'modules/gallery/libraries')
| -rw-r--r-- | modules/gallery/libraries/Gallery_I18n.php | 45 | 
1 files changed, 32 insertions, 13 deletions
| diff --git a/modules/gallery/libraries/Gallery_I18n.php b/modules/gallery/libraries/Gallery_I18n.php index ac0588e3..0e9c0bdc 100644 --- a/modules/gallery/libraries/Gallery_I18n.php +++ b/modules/gallery/libraries/Gallery_I18n.php @@ -150,33 +150,43 @@ class Gallery_I18n_Core {    private function lookup($locale, $message) {      if (!isset($this->_cache[$locale])) { -      $this->_cache[$locale] = array(); -      // TODO: Load data from locale file instead of the DB. +      $this->_cache[$locale] = self::load_translations($locale); +    } + +    $key = self::get_message_key($message); + +    if (isset($this->_cache[$locale][$key])) { +      return $this->_cache[$locale][$key]; +    } else { +      return null; +    } +  } + +  private static function load_translations($locale) { +    $cache_key = "translation|" . $locale; +    $cache = Cache::instance(); +    $translations = $cache->get($cache_key); +    if (empty($translations)) {        foreach (db::build()                 ->select("key", "translation")                 ->from("incoming_translations")                 ->where("locale", "=", $locale)                 ->execute() as $row) { -        $this->_cache[$locale][$row->key] = unserialize($row->translation); +        $translations[$row->key] = unserialize($row->translation);        } - +              // Override incoming with outgoing...        foreach (db::build()                 ->select("key", "translation")                 ->from("outgoing_translations")                 ->where("locale", "=", $locale)                 ->execute() as $row) { -        $this->_cache[$locale][$row->key] = unserialize($row->translation); +        $translations[$row->key] = unserialize($row->translation);        } +       +      $cache->set($cache_key, $translations, array("translation"), 0);      } - -    $key = self::get_message_key($message); - -    if (isset($this->_cache[$locale][$key])) { -      return $this->_cache[$locale][$key]; -    } else { -      return null; -    } +    return $translations;    }    public function has_translation($message, $options=null) { @@ -256,6 +266,15 @@ class Gallery_I18n_Core {      return $this->_call_log;    } +  public static function clear_cache($locale=null) { +    $cache = Cache::instance(); +    if ($locale) { +      $cache->delete("translation|" . $locale); +    } else { +      $cache->delete_tag("translation"); +    } +  } +    private static function get_plural_key($locale, $count) {      $parts = explode('_', $locale);      $language = $parts[0]; | 
