瀏覽代碼

Preparing for multilanguage support

Sergio Brighenti 6 年之前
父節點
當前提交
0409a598d7
共有 4 個文件被更改,包括 120 次插入0 次删除
  1. 1 0
      Gruntfile.js
  2. 105 0
      app/Web/Lang.php
  3. 9 0
      bootstrap/app.php
  4. 5 0
      resources/lang/en.lang.php

+ 1 - 0
Gruntfile.js

@@ -70,6 +70,7 @@ module.exports = function (grunt) {
                 'resources/cache',
                 'resources/cache',
                 'resources/sessions',
                 'resources/sessions',
                 'resources/database',
                 'resources/database',
+                'resources/lang/**/*',
                 'resources/templates/**/*',
                 'resources/templates/**/*',
                 'resources/schemas/**/*',
                 'resources/schemas/**/*',
                 'static/**/*',
                 'static/**/*',

+ 105 - 0
app/Web/Lang.php

@@ -0,0 +1,105 @@
+<?php
+
+namespace App\Web;
+
+
+class Lang
+{
+
+	const DEFAULT_LANG = 'en';
+	const LANG_PATH = __DIR__ . '/../../resources/lang/';
+
+	/** @var  array */
+	protected $cache = [];
+
+	/** @var  string */
+	protected $path;
+
+	/** @var  string */
+	protected $lang;
+
+	/** @var  Lang */
+	protected static $instance;
+
+	/**
+	 * Lang constructor.
+	 * @param $lang
+	 * @param $path
+	 */
+	public function __construct($lang, $path)
+	{
+		$this->lang = $lang;
+		$this->path = $path;
+
+	}
+
+	/**
+	 * @return Lang
+	 */
+	public static function getInstance()
+	{
+
+		if (self::$instance === null) {
+			self::$instance = self::build();
+		}
+
+		return self::$instance;
+	}
+
+	/**
+	 * @param string $lang
+	 * @param string $path
+	 * @return Lang
+	 */
+	public static function build($lang = self::DEFAULT_LANG, $path = null)
+	{
+
+		if (strlen($lang) !== 2) {
+			$lang = strtolower(substr($lang, 0, 2));
+		}
+
+		self::$instance = new self($lang, $path);
+
+		return self::$instance;
+	}
+
+
+	/**
+	 * @param $key
+	 * @param array $args
+	 * @return string
+	 */
+	public function get($key, $args = [])
+	{
+		return $this->getString($key, $this->lang, $args);
+	}
+
+	/**
+	 * @param $key
+	 * @param $lang
+	 * @param $args
+	 * @return string
+	 */
+	private function getString($key, $lang, $args)
+	{
+
+		if (array_key_exists($lang, $this->cache)) {
+			$transDict = $this->cache[$lang];
+		} elseif (file_exists($this->path . $lang . '.lang.php')) {
+			$transDict = include $this->path . $lang . '.lang.php';
+			$this->cache[$lang] = $transDict;
+		} else {
+			$transDict = [];
+		}
+
+		if (array_key_exists($key, $transDict)) {
+			return vsprintf($transDict[$key], $args);
+		}
+
+		if ($lang !== self::DEFAULT_LANG) {
+			return $this->getString($key, self::DEFAULT_LANG, $args);
+		}
+
+		return $key;
+	}
+}

+ 9 - 0
bootstrap/app.php

@@ -1,6 +1,7 @@
 <?php
 <?php
 
 
 use App\Database\DB;
 use App\Database\DB;
+use App\Web\Lang;
 use App\Web\Session;
 use App\Web\Session;
 use Monolog\Formatter\LineFormatter;
 use Monolog\Formatter\LineFormatter;
 use Monolog\Handler\RotatingFileHandler;
 use Monolog\Handler\RotatingFileHandler;
@@ -27,6 +28,7 @@ $config = array_replace_recursive([
 		'username' => null,
 		'username' => null,
 		'password' => null,
 		'password' => null,
 	],
 	],
+	'lang' => 'en',
 ], require __DIR__ . '/../config.php');
 ], require __DIR__ . '/../config.php');
 
 
 if (!$config['displayErrorDetails']) {
 if (!$config['displayErrorDetails']) {
@@ -57,6 +59,12 @@ $container['database'] = function ($container) use (&$config) {
 	return DB::getInstance();
 	return DB::getInstance();
 };
 };
 
 
+Lang::build($config['lang'], __DIR__. '/../resources/lang/');
+
+$container['lang'] = function ($container) {
+	return Lang::getInstance();
+};
+
 
 
 $container['view'] = function ($container) use (&$config) {
 $container['view'] = function ($container) use (&$config) {
 	$view = new \Slim\Views\Twig(__DIR__ . '/../resources/templates', [
 	$view = new \Slim\Views\Twig(__DIR__ . '/../resources/templates', [
@@ -75,6 +83,7 @@ $container['view'] = function ($container) use (&$config) {
 	$view->getEnvironment()->addGlobal('request', $container->get('request'));
 	$view->getEnvironment()->addGlobal('request', $container->get('request'));
 	$view->getEnvironment()->addGlobal('alerts', Session::getAlert());
 	$view->getEnvironment()->addGlobal('alerts', Session::getAlert());
 	$view->getEnvironment()->addGlobal('session', Session::all());
 	$view->getEnvironment()->addGlobal('session', Session::all());
+	$view->getEnvironment()->addGlobal('lang', $container->get('lang'));
 	$view->getEnvironment()->addGlobal('PLATFORM_VERSION', PLATFORM_VERSION);
 	$view->getEnvironment()->addGlobal('PLATFORM_VERSION', PLATFORM_VERSION);
 	return $view;
 	return $view;
 };
 };

+ 5 - 0
resources/lang/en.lang.php

@@ -0,0 +1,5 @@
+<?php
+
+return [
+
+];