Заставка

Программирование на старых и современных языках, а так-же дизайн

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Моя i18n/l10n

Сообщений 1 страница 2 из 2

1

Здесь я покажу как я сделал интернационализацию/локализацию:
i18n.php:

Код:
<?php
// Для множественного числа
function __choice($str_value, $int_index) {
  $arr_values = explode('|', $str_value);
  return $arr_values[$int_index];
}

// Возвращает значение по ключу
function __($str_value) {
  return $_SESSION['i18n'][$str_value];  
}

// Инициализация
function I18n_init() {
  if(isset($_SESSION['i18n']) && $_SESSION['i18n'] != '')
    $_SESSION['i18n'] = '';
}

// Возвращает массив i18n
function I18n_get() {
  return $_SESSION['i18n'];
}

// Добавляет в массив
function I18n_set($arr_i18n) {
  I18n_init();
  $_SESSION['i18n'] = $arr_i18n;
}
  
// Загружает файл с переводом
function I18n_lang($str_language, $str_default_language = NULL) {
  if(!file_exists($str_language)) {
    if($str_default_language == NULL || !file_exists($str_default_language)) 
      return;
      
    $str_language = $str_default_language;
  }

  if(!isset($_SESSION['i18n']))
    $_SESSION['i18n'] = array();

  $arr_i18n = @include($str_language); 
  if(isset($arr_i18n) && is_array($arr_i18n)) {
    $_SESSION['i18n'] = $arr_i18n;
    $arr_i18n = '';
  }
}
?>

ru.php:

Код:
<?php
  return array('main.hello' => 'Всем привет!'); // Перевод 
?>

index.php:

Код:
<?php
  require_once('i18n.php'); // Загрузка модуля i18n.php
  session_start(); // Инициализация сессии
  I18n_init(); // Инициализация i18n
  I18n_lang('ru.php'); // Загрузка русского языка
  echo __('main.hello');  // Выводит "Всем привет!"
?>

0

2

Пример для множественного числа:
ru.php:

Код:
<?php
  return array('main.day' => 'день|дня'); // Перевод 
?>

index.php

Код:
<?php
  require_once('i18n.php'); // Загрузка модуля i18n.php
  session_start(); // Инициализация сессии
  I18n_init(); // Инициализация i18n
  I18n_lang('ru.php'); // Загрузка русского языка
  echo '1 ' .  __choice('main.hello', 0);  // Выводит "1 день"
  echo '2 '.  __choice('main.hello', 1);  // Выводит "2 дня"
?>

0