(Zend_translate, gettext, vb olmadan ...) sadece temel php ile benim çok dilli web sitesi ben ileride sorun olacak?

1 Cevap php

I gettext denedim, ama benim ücretsiz hosting buna izin vermez. I Zend_translate düşündüm, ama benim sayfa çoğunlukla statik beri çerçeveler öğeleri kullanmak istemiyordu.

Yani, ben bu öğretici ile sona erdi:

http://www.bitrepository.com/php-how-to-add-multi-language-support-to-a-website.html

Yazar sadece temel php (emin değilim) kullanın, ve o iş gibi görünüyor, ama bana gelecekte sorunları (ekleme ve grup içinde silme neden olabilir iyi bir (veya ortak) uygulama ya da eğer varsa oldukça emin değilim nerede kodu).

İşte:

common.php:

<?php
session_start();
header('Cache-control: private'); // IE 6 FIX

if(isSet($_GET['lang']))
{
$lang = $_GET['lang'];

// register the session and set the cookie
$_SESSION['lang'] = $lang;

setcookie("lang", $lang, time() + (3600 * 24 * 30));
}
else if(isSet($_SESSION['lang']))
{
$lang = $_SESSION['lang'];
}
else if(isSet($_COOKIE['lang']))
{
$lang = $_COOKIE['lang'];
}
else
{
$lang = 'en';
}

switch ($lang) {
  case 'en':
  $lang_file = 'lang.en.php';
  break;

  case 'de':
  $lang_file = 'lang.es.php';
  break;

  default:
  $lang_file = 'lang.en.php';

}

include_once 'languages/'.$lang_file;
?>

languages/lang.en.php:

<?php
/* 
-----------------
Language: English
-----------------
*/

define('GREETING, Hello World');
?>

languages/lang.es.php:

<?php
/* 
-----------------
Language: Espanol
-----------------
*/

define('GREETING, Hola Mundo');
?>

index.php:

include_once 'common.php';
<p><?php echo LANG_TEST; ?></p>

Ben İspanyolca değiştirmek istiyorsanız Yani, ben sadece ekleyin: ?lang=es URL in (sonra index.php)

1 Cevap

Öncelikle bütün, bu kodu ile çalışmaz. Sen kullanmak zorunda

define('GREETING', 'Hello World').

define için PHP kılavuzuna bakın.

İkincisi, bu için CONTANTS kullanarak korkunç bir fikirdir. Sen sabitler ve risk sürekli nameclashing ton ile küresel ad çöp edilir. Userland Naming Guide bakın.

Eğer Zend_Translate (bunun için bütün çerçeveyi kullanmak zorunda değilsiniz) kullanmak ve kullanamazsınız istemiyorsanız gettext, ben örneğin, çevirilerini depolamak için diziler kullanmanızı öneririz böyle bir şey:

$lang = array(
    'greeting'  => 'Hello World'
    'something' => 'else'
);

ve sonra da şablonda bu gibi kullanabilirsiniz:

<h1><?php echo $lang['greeting'] ?></h1>

Bu şekilde, sadece emin, $lang zaten küresel alanda tanımlı değil yapmak zorunda.

Bazı insanlar, örneğin, yerine çeviri kimlikleri varsayılan dilini kullanmayı tercih onlar yazmayı tercih

<h1><?php echo t('Hello World') ?></h1>

burada t çıktı dize haritalayan giriş dizesi işlev görecek. Çeviri dizi daha sonra tam cümleler içeren ve örneğin, diğer dillere bu eşlersiniz

$lang = array(
    'Hello World' => 'Hola Mundo'
);

Ama tabii, sen de iyi $lang['Hello World'] ile erişebilir. Sadece uzun dizeleri için zor alır. Birçok çeviri fonksiyonları böyle bir şey için izin olsa ek params geçmesine izin:

$lang = array(
    'currentTime' => 'The current time is %s'
);

<h1><?php echo t('currentTime', date('H:i:s')) ?></h1>