From d4044d0283147df678dc0f833abfcc844e0eff75 Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
Date: Mon, 18 Jun 2012 21:16:51 +0200
Subject: [PATCH] Delay loading of translations until they are used

---
 lib/l10n.php        | 30 +++++++++++++++++++++++-------
 lib/l10n/string.php | 25 +++++++++++++++++++++++++
 2 files changed, 48 insertions(+), 7 deletions(-)
 create mode 100644 lib/l10n/string.php

diff --git a/lib/l10n.php b/lib/l10n.php
index ba4bf23780..0f01e927ff 100644
--- a/lib/l10n.php
+++ b/lib/l10n.php
@@ -39,6 +39,16 @@ class OC_L10N{
 	 */
 	protected static $language = '';
 	
+	/**
+	 * App of this object
+	 */
+	protected $app;
+
+	/**
+	 * Language of this object
+	 */
+	protected $lang;
+
 	/**
 	 * Translations
 	 */
@@ -77,10 +87,17 @@ class OC_L10N{
 	 * language.
 	 */
 	public function __construct($app, $lang = null){
-		$this->init($app, $lang);
+		$this->app = $app;
+		$this->lang = $lang;
 	}
 		
-	protected function init($app, $lang = null){
+	protected function init(){
+		if ($this->app === true) {
+			return;
+		}
+		$app = $this->app;
+		$lang = $this->lang;
+		$this->app = true;
 		// Find the right language
 		if(is_null($lang)){
 			$lang = self::findLanguage($app);
@@ -127,10 +144,7 @@ class OC_L10N{
 	 * returned.
 	 */
 	public function t($text, $parameters = array()){
-		if(array_key_exists($text, $this->translations)){
-			return vsprintf($this->translations[$text], $parameters);
-		}
-		return vsprintf($text, $parameters);
+		return new OC_L10N_String($this, $text, $parameters);
 	}
 
 	/**
@@ -144,7 +158,7 @@ class OC_L10N{
 	public function tA($textArray){
 		$result = array();
 		foreach($textArray as $key => $text){
-			$result[$key] = $this->t($text);
+			$result[$key] = (string)$this->t($text);
 		}
 		return $result;
 	}
@@ -156,6 +170,7 @@ class OC_L10N{
 	 * Returns an associative array with all translations
 	 */
 	public function getTranslations(){
+		$this->init();
 		return $this->translations;
 	}
 
@@ -182,6 +197,7 @@ class OC_L10N{
 	 *    - params: timestamp (int/string)
 	 */
 	public function l($type, $data){
+		$this->init();
 		switch($type){
 			// If you add something don't forget to add it to $localizations
 			// at the top of the page
diff --git a/lib/l10n/string.php b/lib/l10n/string.php
new file mode 100644
index 0000000000..4769790a16
--- /dev/null
+++ b/lib/l10n/string.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+class OC_L10N_String{
+	protected $l10n;
+	public function __construct($l10n, $text, $parameters){
+		$this->l10n = $l10n;
+		$this->text = $text;
+		$this->parameters = $parameters;
+
+	}
+
+	public function __toString(){
+		$translations = $this->l10n->getTranslations();
+		if(array_key_exists($this->text, $translations)){
+			return vsprintf($translations[$this->text], $this->parameters);
+		}
+		return vsprintf($this->text, $this->parameters);
+	}
+}
-- 
GitLab