From 9f777fba988422366732a3f128e2fb73ffddfbb4 Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
Date: Wed, 25 Sep 2013 18:34:01 +0200
Subject: [PATCH] Add L10N interface to server container

---
 lib/l10n/factory.php            | 34 +++++++++++++++++
 lib/private/l10n.php            | 18 +++------
 lib/private/server.php          | 12 ++++++
 lib/public/il10n.php            | 67 +++++++++++++++++++++++++++++++++
 lib/public/iservercontainer.php |  7 ++++
 5 files changed, 125 insertions(+), 13 deletions(-)
 create mode 100644 lib/l10n/factory.php
 create mode 100644 lib/public/il10n.php

diff --git a/lib/l10n/factory.php b/lib/l10n/factory.php
new file mode 100644
index 0000000000..ba168872ac
--- /dev/null
+++ b/lib/l10n/factory.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ *
+ */
+
+namespace OC\L10N;
+
+/**
+ * TODO: Description
+ */
+class Factory {
+	/**
+	 * cached instances
+	 */
+	protected $instances = array();
+
+	/**
+	 * get an L10N instance
+	 * @param $app string
+	 * @param $lang string|null
+	 * @return OC_L10N
+	 */
+	public function get($app) {
+		if (!isset($this->instances[$app])) {
+			$this->instances[$app] = new \OC_L10N($app);
+		}
+		return $this->instances[$app];
+	}
+
+}
diff --git a/lib/private/l10n.php b/lib/private/l10n.php
index f93443b886..3e84c306dc 100644
--- a/lib/private/l10n.php
+++ b/lib/private/l10n.php
@@ -25,12 +25,7 @@
 /**
  * This class is for i18n and l10n
  */
-class OC_L10N {
-	/**
-	 * cached instances
-	 */
-	protected static $instances=array();
-
+class OC_L10N implements \OCP\IL10N {
 	/**
 	 * cache
 	 */
@@ -83,13 +78,10 @@ class OC_L10N {
 	 * @return OC_L10N
 	 */
 	public static function get($app, $lang=null) {
-		if(is_null($lang)) {
-			if(!isset(self::$instances[$app])) {
-				self::$instances[$app]=new OC_L10N($app);
-			}
-			return self::$instances[$app];
-		}else{
-			return new OC_L10N($app, $lang);
+		if (is_null($lang)) {
+			return OC::$server->getL10N($app);
+		} else {
+			return new \OC_L10N($app, $lang);
 		}
 	}
 
diff --git a/lib/private/server.php b/lib/private/server.php
index ef2007663c..e4cc0c6da8 100644
--- a/lib/private/server.php
+++ b/lib/private/server.php
@@ -102,6 +102,9 @@ class Server extends SimpleContainer implements IServerContainer {
 		$this->registerService('AllConfig', function($c) {
 			return new \OC\AllConfig();
 		});
+		$this->registerService('L10NFactory', function($c) {
+			return new \OC\L10N\Factory();
+		});
 		$this->registerService('UserCache', function($c) {
 			return new UserCache();
 		});
@@ -217,6 +220,15 @@ class Server extends SimpleContainer implements IServerContainer {
 		return $this->query('AllConfig');
 	}
 
+	/**
+	 * get an L10N instance
+	 * @param $app string appid
+	 * @return \OC_L10N
+	 */
+	function getL10N($app) {
+		return $this->query('L10NFactory')->get($app);
+	}
+
 	/**
 	 * Returns an ICache instance
 	 *
diff --git a/lib/public/il10n.php b/lib/public/il10n.php
new file mode 100644
index 0000000000..9cf9093d39
--- /dev/null
+++ b/lib/public/il10n.php
@@ -0,0 +1,67 @@
+<?php
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ *
+ */
+
+namespace OCP;
+
+/**
+ * TODO: Description
+ */
+interface IL10N {
+	/**
+	 * @brief Translating
+	 * @param $text String The text we need a translation for
+	 * @param array $parameters default:array() Parameters for sprintf
+	 * @return \OC_L10N_String|string Translation or the same text
+	 *
+	 * Returns the translation. If no translation is found, $text will be
+	 * returned.
+	 */
+	public function t($text, $parameters = array());
+
+	/**
+	 * @brief Translating
+	 * @param $text_singular String the string to translate for exactly one object
+	 * @param $text_plural String the string to translate for n objects
+	 * @param $count Integer Number of objects
+	 * @param array $parameters default:array() Parameters for sprintf
+	 * @return \OC_L10N_String|string Translation or the same text
+	 *
+	 * Returns the translation. If no translation is found, $text will be
+	 * returned. %n will be replaced with the number of objects.
+	 *
+	 * The correct plural is determined by the plural_forms-function
+	 * provided by the po file.
+	 *
+	 */
+	public function n($text_singular, $text_plural, $count, $parameters = array());
+
+	/**
+	 * @brief Localization
+	 * @param $type Type of localization
+	 * @param $params parameters for this localization
+	 * @returns String or false
+	 *
+	 * Returns the localized data.
+	 *
+	 * Implemented types:
+	 *  - date
+	 *    - Creates a date
+	 *    - l10n-field: date
+	 *    - params: timestamp (int/string)
+	 *  - datetime
+	 *    - Creates date and time
+	 *    - l10n-field: datetime
+	 *    - params: timestamp (int/string)
+	 *  - time
+	 *    - Creates a time
+	 *    - l10n-field: time
+	 *    - params: timestamp (int/string)
+	 */
+	public function l($type, $data);
+}
diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index f4045faefe..e8bc1bedf9 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -101,6 +101,13 @@ interface IServerContainer {
 	 */
 	function getConfig();
 
+	/**
+	 * get an L10N instance
+	 * @param $app string appid
+	 * @return \OCP\IL10N
+	 */
+	function getL10N($app);
+
 	/**
 	 * Returns an ICache instance
 	 *
-- 
GitLab