l10n added
This commit is contained in:
parent
6a19a7d226
commit
baa00a589f
|
@ -0,0 +1,247 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud
|
||||
*
|
||||
* @author Jakob Sack
|
||||
* @copyright 2010 Frank Karlitschek karlitschek@kde.org
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* This class is for i18n and l10n
|
||||
*/
|
||||
class OC_L10N{
|
||||
/**
|
||||
* cache
|
||||
*/
|
||||
protected static $cache = array();
|
||||
|
||||
/**
|
||||
* The best language
|
||||
*/
|
||||
protected static $language = '';
|
||||
|
||||
/**
|
||||
* Translations
|
||||
*/
|
||||
private $translations = array();
|
||||
|
||||
/**
|
||||
* Localization
|
||||
*/
|
||||
private $localizations = array(
|
||||
'date' => 'd.m.Y',
|
||||
'datetime' => 'd.m.Y H:i:s',
|
||||
'time' => 'H:i:s' );
|
||||
|
||||
/**
|
||||
* @brief The constructor
|
||||
* @param $app the app requesting l10n
|
||||
* @param $lang default: null Language
|
||||
* @returns OC_L10N-Object
|
||||
*
|
||||
* If language is not set, the constructor tries to find the right
|
||||
* language.
|
||||
*/
|
||||
public function __construct( $app, $lang = null ){
|
||||
// Find the right language
|
||||
if( is_null( $lang )){
|
||||
self::findLanguage( $app );
|
||||
}
|
||||
|
||||
// Use cache if possible
|
||||
if(array_key_exists($app.'::'.$lang, self::$cache )){
|
||||
$this->translations = self::$cache[$app.'::'.$lang]['t'];
|
||||
$this->localizations = self::$cache[$app.'::'.$lang]['l'];
|
||||
}
|
||||
else{
|
||||
$i18ndir = self::findI18nDir( $app );
|
||||
|
||||
// Localization is in /l10n, Texts are in $i18ndir
|
||||
// (Just no need to define date/time format etc. twice)
|
||||
if( file_exists( $i18ndir.$lang.'php' )){
|
||||
// Include the file, save the data from $CONFIG
|
||||
include( $i18ndir.$lang.'php' );
|
||||
if( isset( $TRANSLATIONS ) && is_array( $TRANSLATIONS )){
|
||||
$this->translations = $TRANSLATIONS;
|
||||
}
|
||||
}
|
||||
|
||||
if( file_exists( '/l10n/l10n-'.$lang.'php' )){
|
||||
// Include the file, save the data from $CONFIG
|
||||
include( $SERVERROOT.'/l10n/l10n-'.$lang.'php' );
|
||||
if( isset( $LOCALIZATIONS ) && is_array( $LOCALIZATIONS )){
|
||||
$this->localizations = array_merge( $this->localizations, $LOCALIZATIONS );
|
||||
}
|
||||
}
|
||||
|
||||
self::$cache[$app.'::'.$lang]['t'] = $this->translations;
|
||||
self::$cache[$app.'::'.$lang]['l'] = $this->localizations;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Translating
|
||||
* @param $text The text we need a translation for
|
||||
* @returns Translation or the same text
|
||||
*
|
||||
* Returns the translation. If no translation is found, $text will be
|
||||
* returned.
|
||||
*/
|
||||
public function t($text){
|
||||
if(array_key_exists($text, $this->translations)){
|
||||
return $this->translations[$text];
|
||||
}
|
||||
return $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* @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)
|
||||
* - datetime
|
||||
* - Creates date and time
|
||||
* - l10n-field: datetime
|
||||
* - params: timestamp (int)
|
||||
* - time
|
||||
* - Creates a time
|
||||
* - l10n-field: time
|
||||
* - params: timestamp (int)
|
||||
*/
|
||||
public function l($type, $data){
|
||||
switch($type){
|
||||
case 'date':
|
||||
return date( $this->localizations['date'], $data );
|
||||
break;
|
||||
case 'datetime':
|
||||
return date( $this->localizations['datetime'], $data );
|
||||
break;
|
||||
case 'time':
|
||||
return date( $this->localizations['time'], $data );
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Choose a language
|
||||
* @param $texts Associative Array with possible strings
|
||||
* @returns String
|
||||
*
|
||||
* $text is an array 'de' => 'hallo welt', 'en' => 'hello world', ...
|
||||
*
|
||||
* This function is useful to avoid loading thousands of files if only one
|
||||
* simple string is needed, for example in appinfo.php
|
||||
*/
|
||||
public static function selectLanguage( $text ){
|
||||
$lang = self::findLanguage( array_keys( $text ));
|
||||
return $text[$lang];
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief find the best language
|
||||
* @param $app Array or string, details below
|
||||
* @returns language
|
||||
*
|
||||
* If $app is an array, ownCloud assumes that these are the available
|
||||
* languages. Otherwise ownCloud tries to find the files in the l10n
|
||||
* folder.
|
||||
*
|
||||
* If nothing works it returns 'en'
|
||||
*/
|
||||
public static function findLanguage( $app = null ){
|
||||
if( !is_array( $app) && self::$language != '' ){
|
||||
return self::$language;
|
||||
}
|
||||
|
||||
$available = array();
|
||||
if( is_array( $app )){
|
||||
$available = $app;
|
||||
}
|
||||
else{
|
||||
$dir = self::findI18nDir( $app );
|
||||
if( file_exists($dir)){
|
||||
$dh = opendir($dir);
|
||||
while(( $file = readdir( $dh )) !== false ){
|
||||
if( substr( $file, -4, 4 ) == '.php' ){
|
||||
$i = substr( $file, 0, -4 );
|
||||
if( $i != '' ){
|
||||
$available[] = $i;
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir($dh);
|
||||
}
|
||||
}
|
||||
|
||||
if( isset($_SESSION['user_id']) && OC_PREFERENCES::getValue( $_SESSION['user_id'], 'core', 'lang' )){
|
||||
$lang = OC_PREFERENCES::getValue( $_SESSION['user_id'], 'core', 'lang' );
|
||||
self::$language = $lang;
|
||||
if( array_search( $lang, $available )){
|
||||
return $lang;
|
||||
}
|
||||
}
|
||||
|
||||
if( isset( $_SERVER['HTTP_ACCEPT_LANGUAGE'] )){
|
||||
$accepted_languages = preg_split( '/,\s*/', $_SERVER['HTTP_ACCEPT_LANGUAGE'] );
|
||||
foreach( $accepted_languages as $i ){
|
||||
$temp = explode( ';', $i );
|
||||
$temp = explode( '-', $temp[0] );
|
||||
if( array_key_exists( $temp[0], $available )){
|
||||
return $temp[0];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Last try: English
|
||||
return 'en';
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief find the best language
|
||||
* @param $app App that needs to be translated
|
||||
* @returns language
|
||||
*
|
||||
* Finds the best language. Depends on user settings and browser
|
||||
* information
|
||||
*/
|
||||
protected static function findI18nDir( $app ){
|
||||
global $SERVERROOT;
|
||||
|
||||
// find the i18n dir
|
||||
$i18ndir = $SERVERROOT.'/l10n/';
|
||||
if( $app != 'core' && $app != '' ){
|
||||
// Check if the app is in the app folder
|
||||
if( file_exists( $SERVERROOT.'/apps/'.$app.'/l10n/' )){
|
||||
$i18ndir = $SERVERROOT.'/apps/'.$app.'/l10n/';
|
||||
}
|
||||
else{
|
||||
$i18ndir = $SERVERROOT.'/'.$app.'/l10n/';
|
||||
}
|
||||
}
|
||||
return $i18ndir;
|
||||
}
|
||||
}
|
|
@ -73,8 +73,9 @@ function human_file_size( $bytes ){
|
|||
class OC_TEMPLATE{
|
||||
private $renderas; // Create a full page?
|
||||
private $application; // template Application
|
||||
private $vars; // The smarty object
|
||||
private $template; // The smarty object
|
||||
private $vars; // Vars
|
||||
private $template; // The path to the template
|
||||
private $l10n; // The l10n-Object
|
||||
|
||||
/**
|
||||
* @brief Constructor
|
||||
|
@ -113,6 +114,7 @@ class OC_TEMPLATE{
|
|||
$this->application = $app;
|
||||
$this->template = $template;
|
||||
$this->vars = array();
|
||||
$this->l10n = new OC_L10N($app);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -251,6 +253,7 @@ class OC_TEMPLATE{
|
|||
private function _fetch(){
|
||||
// Register the variables
|
||||
$_ = $this->vars;
|
||||
$l = $this->l10n;
|
||||
|
||||
// Execute the template
|
||||
ob_start();
|
||||
|
|
Loading…
Reference in New Issue