Core PHP Site перевод на другой язык

Я создал массив $ _en для хранения английских слов / предложений и массив $ _no для хранения норвежского текста, чтобы использовать его в качестве перевода для моего основного проекта PHP.

<?php
$_en = array(
'mail' => 'email',
'msg1' => 'how are you?'

);
$_no = array(
'mail' => 'epost',
'msg1' => 'hvordan har du det ?'
);

echo "EMAIL IN ENGLISH:".$_en['mail']."\n"; //email in english
echo "EMAIL IN NORWEGIAN:".$_no['mail']; //email in NORWEGIAN
echo "Message IN NORWEGIAN:".$_no['msg1']; //Message in NORWEGIAN

На основе массива и значения ключа текст будет вызываться на основе функции перевода сайта.

Любые лучшие решения и улучшения приветствуются. Поправь меня заранее спасибо.

0

Решение

Лучшее решение, как уже упоминалось, мой Thamilan в комментариях будет использовать класс для обработки конверсий.

Думайте об этом так;

Ваш файл шаблона

$trans = new Translate('en');
<h1><?php echo $trans->__('This is a title'); ?></h1>

Translate.php

class Translate {
public function __construct($lang) {
$this->lang = $lang;
}

public function __($string) {
// $translatedString = $this->getTranslatedString($string);
return $translatedString;
}
}

В этом классе вам нужно получить перевод из того места, где он хранится. Вы можете хранить в этом классе в массиве, или лучшим решением было бы загрузить их из файла CSV.

1

Другие решения

Попробуй это :—

parse_ini_file () — очень мощный маленький инструмент, который делает именно то, что вы ожидаете. Используя такой простой файл, который мы назовем en.ini:

PAGE_TITLE = My website page title
HEADER_TITLE = My website header title
SITE_NAME = My Website
SLOGAN = My slogan here
HEADING = Heading
MENU_LOGIN = Login
MENU_SIGNUP = Sign up
MENU_FIND_RIDE = Find Ride
MENU_ADD_RIDE = Add Ride
MENU_LOGOUT = Logout

Вы можете просто использовать: parse_ini_file (‘en.ini’) для возврата массива точно так же, как в вашем операторе switch, что будет намного проще для других (не программистов) читать и писать для вас. И если бы вы затем продолжали именовать файлы этим стилем, вы могли бы уменьшить userLanguage () до чего-то вроде:

public function userLanguage()
{
$file = '/path/to/language/config/' . $this->UserLng . '.ini';
if(!file_exists($file))
{
//Handle Error
}
return parse_ini_file($file);
}
0

Другое решение Попробуйте: —

Создать абстрактный класс

interface Language
{
public function getPageTitle();
public function getHeaderTitle();
public function getSiteName();
public function getSlogan();
public function getHeading();
public function getMenuLogin();
public function getMenuSignup();
public function getMenuFindRide();
public function getMenuAddRide();
public function getMenuLogout();
}

Хотя интерфейс небольшой, его реализация может привести к созданию большого файла, хотя, возможно, он будет более понятным, чем стиль массива:

class English implements Language
{
public function getHeaderTitle()
{
return 'My website header title';
}

public function getHeading()
{
return 'Heading';
}

// etc...
}

Альтернатива: —

В качестве альтернативы, вы можете комбинировать эти стили и иметь одноэлементный язык с методами получения, обращающимися к этому массиву, т.е.

class Language
{
private $languageArray;
private $userLanguage;

public function __construct($language)
{
$this->userLanguage = $language;
$this->languageArray = self::userLanguage();
}

private static function userLanguage()
{
$file = '/path/to/language/config/' . $this->userLanguage . '.ini';
if(!file_exists($file))
{
//Handle Error
}
return parse_ini_file($file);
}

public function getPageTitle()
{
return $this->languageArray['PAGE_TITLE'];
}

public function getHeaderTitle()
{
return $this->languageArray['HEADER_TITLE'];
}

//etc...
}

Который обеспечит преимущества обоих. Лично, хотя, если вы не планируете добавлять больше языков в ближайшем будущем, я думаю, что решение №2 подойдет вам лучше всего.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector