Dukungan Multi-Bahasa Phalcon

Komponen Phalcon \ Translate membantu dalam membuat aplikasi dgn kemanpuan multibahasa. Jika aplikasi menggunakan komponen ini, maka dapat menampilkan konten dalam bahasa yang berbeda, berdasarkan bahasa yang dipilih pengguna yang didukung oleh aplikasi.

Adapter 

Komponen ini memanfaatkan adapter untuk membaca pesan terjemahan dari sumber yang berbeda dalam cara yang terpadu.

Adaptor Deskripsi
NativeArray Menggunakan array PHP untuk menyimpan pesan. Ini adalah pilihan terbaik dalam hal kinerja.

Penggunaan Komponen 

String terjemahan disimpan dalam file. Struktur file-file ini bisa bervariasi tergantung dari adaptor yang digunakan. Phalcon memberi Anda kebebasan untuk mengatur string terjemahan Anda. Sebuah struktur sederhana bisa berbentuk:

app/messages/en.php
app/messages/es.php
app/messages/fr.php
app/messages/zh.php

Setiap file berisi array terjemahan berupa key/value. Untuk setiap file penerjemahan, key haruslah unik. Array yang sama digunakan dalam file yang berbeda, di mana key tetap sama namun value mengandung string terjemahan tergantung pada setiap bahasa.

<?php

//app/messages/es.php
$messages = array(
    "hi"      => "Hello",
    "bye"     => "Good Bye",
    "hi-name" => "Hello %name%",
    "song"    => "This song is %song%"
);
<?php

//app/messages/fr.php
$messages = array(
    "hi"      => "Bonjour",
    "bye"     => "Au revoir",
    "hi-name" => "Bonjour %name%",
    "song"    => "La chanson est %song%"
);

Menerapkan mekanisme terjemahan dalam aplikasi Anda adalah sepele tapi tergantung pada bagaimana Anda ingin menerapkannya. Anda dapat menggunakan deteksi otomatis bahasa dari browser pengguna atau Anda dapat memberikan halaman pengaturan di mana pengguna dapat memilih bahasa mereka.

Sebuah cara sederhana untuk mendeteksi bahasa pengguna adalah untuk mengurai isi $_SERVER[‘HTTP_ACCEPT_LANGUAGE’], atau jika Anda ingin, akses langsung dengan memanggil $this->request->getBestLanguage() dari suatu action/controller:

<?php

class UserController extends \Phalcon\Mvc\Controller
{

  protected function _getTranslation()
  {

    //Ask browser what is the best language
    $language = $this->request->getBestLanguage();

    //Check if we have a translation file for that lang
    if (file_exists("app/messages/".$language.".php")) {
       require "app/messages/".$language.".php";
    } else {
       // fallback to some default
       require "app/messages/en.php";
    }

    //Return a translation object
    return new \Phalcon\Translate\Adapter\NativeArray(array(
       "content" => $messages
    ));

  }

  public function indexAction()
  {
    $this->view->setVar("name", "Mike");
    $this->view->setVar("t", $this->_getTranslation());
  }

}

Metode _getTranslation yang tersedia untuk semua action yang memerlukan terjemahan. Variabel $t diberikan ke view, dan dengan itu, kita bisa menerjemahkan string dalam layer tsb:

<!-- welcome -->
<!-- String: hi => 'Hello' -->
<p><?php echo $t->_("hi"), " ", $name; ?></p>

The “_” fungsi memberi return string terjemahan berdasarkan indeks yg diberikan. Beberapa string perlu memasukkan isian placeholder misalnya Hello %nama%. Placeholder ini bisa diganti dengan parameter yang dikirimkan dalam fungsi “_”. Parameter yang dikirimkan berbentuk array key / value, di mana key sama dengan nama placeholder dan nilai data aktual yang akan diganti:

<!-- welcome -->
<!-- String: hi-user => 'Hello %name%' -->
<p><?php echo $t->_("hi-user", array("name" => $name)); ?></p>

Beberapa aplikasi menerapkan multibahasa pada URL seperti http://www.mozilla.org/ es-ES / firefox /. Phalcon bisa menerapkan ini dengan menggunakan Router .

Menerapkan adapter Anda sendiri 

The Phalcon \ Translate \ AdapterInterface antarmuka harus dilaksanakan dalam rangka untuk membuat sendiri menerjemahkan adapter atau extend yang sudah ada:

<?php

class MyTranslateAdapter implements Phalcon\Translate\AdapterInterface
{

    /**
     * Adapter constructor
     *
     * @param array $data
     */
    public function __construct($options);

    /**
     * Returns the translation string of the given key
     *
     * @param   string $translateKey
     * @param   array $placeholders
     * @return  string
     */
    public function _($translateKey, $placeholders=null);

    /**
     * Returns the translation related to the given key
     *
     * @param   string $index
     * @param   array $placeholders
     * @return  string
     */
    public function query($index, $placeholders=null);

    /**
     * Check whether is defined a translation key in the internal array
     *
     * @param   string $index
     * @return  bool
     */
    public function exists($index);

}

Ada beberapa adapter yang tersedia untuk komponen ini di Phalcon Inkubator

Terjemahan dr Dukungan multi-bahasa Phalcon
http://docs.phalconphp.com/en/latest/reference/translate.html