summaryrefslogtreecommitdiff
path: root/app/Core/Translator.php
diff options
context:
space:
mode:
authorFrédéric Guillot <fred@kanboard.net>2014-05-22 12:28:28 -0400
committerFrédéric Guillot <fred@kanboard.net>2014-05-22 12:28:28 -0400
commit2230dd4e6b148346c0ec596b9e3e12996a762ed8 (patch)
treeef99ccde4f8b18592a3fb06a6ec45162c501fe38 /app/Core/Translator.php
parenta750b8ab2a0cb715da6fd9025a7ec8375db68a4d (diff)
Code refactoring (add autoloader and change files organization)
Diffstat (limited to 'app/Core/Translator.php')
-rw-r--r--app/Core/Translator.php155
1 files changed, 155 insertions, 0 deletions
diff --git a/app/Core/Translator.php b/app/Core/Translator.php
new file mode 100644
index 00000000..be0be66a
--- /dev/null
+++ b/app/Core/Translator.php
@@ -0,0 +1,155 @@
+<?php
+
+namespace Core;
+
+/**
+ * Translator class
+ *
+ * @package core
+ * @author Frederic Guillot
+ */
+class Translator
+{
+ /**
+ * Locales path
+ *
+ * @var string
+ */
+ const PATH = 'app/Locales/';
+
+ /**
+ * Locales
+ *
+ * @static
+ * @access private
+ * @var array
+ */
+ private static $locales = array();
+
+ /**
+ * Get a translation
+ *
+ * $translator->translate('I have %d kids', 5);
+ *
+ * @access public
+ * @return string
+ */
+ public function translate($identifier)
+ {
+ $args = func_get_args();
+
+ array_shift($args);
+ array_unshift($args, $this->get($identifier, $identifier));
+
+ foreach ($args as &$arg) {
+ $arg = htmlspecialchars($arg, ENT_QUOTES, 'UTF-8', false);
+ }
+
+ return call_user_func_array(
+ 'sprintf',
+ $args
+ );
+ }
+
+ /**
+ * Get a formatted number
+ *
+ * $translator->number(1234.56);
+ *
+ * @access public
+ * @param float $number Number to format
+ * @return string
+ */
+ public function number($number)
+ {
+ return number_format(
+ $number,
+ $this->get('number.decimals', 2),
+ $this->get('number.decimals_separator', '.'),
+ $this->get('number.thousands_separator', ',')
+ );
+ }
+
+ /**
+ * Get a formatted currency number
+ *
+ * $translator->currency(1234.56);
+ *
+ * @access public
+ * @param float $amount Number to format
+ * @return string
+ */
+ public function currency($amount)
+ {
+ $position = $this->get('currency.position', 'before');
+ $symbol = $this->get('currency.symbol', '$');
+ $str = '';
+
+ if ($position === 'before') {
+ $str .= $symbol;
+ }
+
+ $str .= $this->number($amount);
+
+ if ($position === 'after') {
+ $str .= ' '.$symbol;
+ }
+
+ return $str;
+ }
+
+ /**
+ * Get a formatted datetime
+ *
+ * $translator->datetime('%Y-%m-%d', time());
+ *
+ * @access public
+ * @param string $format Format defined by the strftime function
+ * @param integer $timestamp Unix timestamp
+ * @return string
+ */
+ public function datetime($format, $timestamp)
+ {
+ if (! $timestamp) {
+ return '';
+ }
+
+ return strftime($this->get($format, $format), (int) $timestamp);
+ }
+
+ /**
+ * Get an identifier from the translations or return the default
+ *
+ * @access public
+ * @param string $idendifier Locale identifier
+ * @param string $default Default value
+ * @return string
+ */
+ public function get($identifier, $default = '')
+ {
+ if (isset(self::$locales[$identifier])) {
+ return self::$locales[$identifier];
+ }
+ else {
+ return $default;
+ }
+ }
+
+ /**
+ * Load translations
+ *
+ * @static
+ * @access public
+ * @param string $language Locale code: fr_FR
+ */
+ public static function load($language)
+ {
+ setlocale(LC_TIME, $language.'.UTF-8', $language);
+
+ $filename = self::PATH.$language.DIRECTORY_SEPARATOR.'translations.php';
+
+ if (file_exists($filename)) {
+ self::$locales = require $filename;
+ }
+ }
+}