aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcash <cash.costello@gmail.com>2012-01-25 19:19:27 -0500
committercash <cash.costello@gmail.com>2012-01-25 19:19:27 -0500
commitdd5690916b8acb952669914c0e7dfc3ebf0842c2 (patch)
tree74714627c607e1710fa7e611250483f3b0c06df9
parent6a2d3d7c2d22f57f28472d9d023788d20d41f005 (diff)
downloadelgg-dd5690916b8acb952669914c0e7dfc3ebf0842c2.tar.gz
elgg-dd5690916b8acb952669914c0e7dfc3ebf0842c2.tar.bz2
caching language data
-rw-r--r--engine/lib/cache.php6
-rw-r--r--engine/lib/configuration.php2
-rw-r--r--engine/lib/elgglib.php7
-rw-r--r--engine/lib/languages.php26
4 files changed, 37 insertions, 4 deletions
diff --git a/engine/lib/cache.php b/engine/lib/cache.php
index 633c470eb..c7e0ae31c 100644
--- a/engine/lib/cache.php
+++ b/engine/lib/cache.php
@@ -455,6 +455,12 @@ function _elgg_cache_init() {
elgg_save_system_cache($type, serialize($CONFIG->$var_name));
}
}
+
+ if ($CONFIG->system_cache_enabled && !$CONFIG->i18n_loaded_from_cache) {
+ foreach ($CONFIG->translations as $lang => $map) {
+ elgg_save_system_cache("$lang.php", serialize($map));
+ }
+ }
}
elgg_register_event_handler('ready', 'system', '_elgg_cache_init');
diff --git a/engine/lib/configuration.php b/engine/lib/configuration.php
index 7f787331f..998cd1943 100644
--- a/engine/lib/configuration.php
+++ b/engine/lib/configuration.php
@@ -614,6 +614,8 @@ function _elgg_load_application_config() {
$lastcached = datalist_get("simplecache_lastcached_$viewtype");
$CONFIG->lastcache = $lastcached;
+ $CONFIG->i18n_loaded_from_cache = false;
+
// this must be synced with the enum for the entities table
$CONFIG->entity_types = array('group', 'object', 'site', 'user');
}
diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php
index aba84bd48..11bdc7285 100644
--- a/engine/lib/elgglib.php
+++ b/engine/lib/elgglib.php
@@ -2062,7 +2062,8 @@ function elgg_walled_garden() {
* 2. connects to database
* 3. verifies the installation suceeded
* 4. loads application configuration
- * 5. loads site configuration
+ * 5. loads i18n data
+ * 6. loads site configuration
*
* @access private
*/
@@ -2071,14 +2072,14 @@ function _elgg_engine_boot() {
set_error_handler('_elgg_php_error_handler');
set_exception_handler('_elgg_php_exception_handler');
- register_translations(dirname(dirname(dirname(__FILE__))) . "/languages/");
-
setup_db_connections();
verify_installation();
_elgg_load_application_config();
+ register_translations(dirname(dirname(dirname(__FILE__))) . "/languages/");
+
_elgg_load_site_config();
_elgg_load_cache();
diff --git a/engine/lib/languages.php b/engine/lib/languages.php
index 80c789ced..4dc094109 100644
--- a/engine/lib/languages.php
+++ b/engine/lib/languages.php
@@ -155,7 +155,6 @@ function register_translations($path, $load_all = false) {
// Get the current language based on site defaults and user preference
$current_language = get_current_language();
- elgg_log("Translations loaded from: $path");
// only load these files unless $load_all is true.
$load_language_files = array(
@@ -165,6 +164,29 @@ function register_translations($path, $load_all = false) {
$load_language_files = array_unique($load_language_files);
+ if ($CONFIG->system_cache_enabled && !$load_all) {
+ // load language files from cache
+ $data = array();
+ $loaded = true;
+ foreach ($load_language_files as $lang_file) {
+ $lang = substr($lang_file, 0, strpos($lang_file, '.'));
+ $data[$lang] = elgg_load_system_cache($lang_file);
+ if (!$data[$lang]) {
+ $loaded = false;
+ break;
+ }
+ }
+
+ if ($loaded) {
+ foreach ($data as $lang => $map) {
+ add_translation($lang, unserialize($map));
+ }
+
+ $CONFIG->i18n_loaded_from_cache = true;
+ return true;
+ }
+ }
+
$handle = opendir($path);
if (!$handle) {
elgg_log("Could not open language path: $path", 'ERROR');
@@ -186,6 +208,8 @@ function register_translations($path, $load_all = false) {
}
}
+ elgg_log("Translations loaded from: $path");
+
return $return;
}