Langsung ke konten utama

Menggunakan Translation di Symfony 4

Selamat pagi, siang, malam untuk anda yang kebetulan sedang mampir di blog saya, melanjutkan seri tulisan saya tentang symfony 4, kali ini saya akan menulis tentang Translation. Apa itu Translation ? yah... simpelnya sejenis tool untuk membuat aplikasi kita bisa multi bahasa. Untuk tulisan saya sebelumnya bisa dibaca di https://catatan-pemrograman.blogspot.com/2018/10/membuat-api-crud-di-symfony-4.html. Da untuk bahan praktek saya, bisa diunduh di akun github saya disini : https://github.com/kematjaya0/tutorial. Oke cekidot....

Instalasi Translation

tulisan ini saya praktekkan dan saya rangkum dari halaman resmi symfony di https://symfony.com/doc/current/components/translation.html. Langsung saja untuk instalasi silahkan masuk ke direktori / folder project latihan kita dengan menggunakan CMD. Kalau saya di

F:\xampp_72\htdocs\tutorial

kemudian jalankan perintah berikut: 
composer require symfony/translation

dan ikuti instruksi yang diberikan. Setelah selesai instalasi, silahkan buka file config di config/packages/translation.yaml
framework:
    default_locale: '%locale%'
    translator:
        default_path: '%kernel.project_dir%/translations'
        fallbacks:
            - '%locale%'

dari kode diatas, folder untuk membuat file translation adalah di folder translations. Untuk simulasi dual bahasa, disini saya coba buat antara bahasa Indonesia dengan bahasa Inggris. Untuk memulainya kita buat file translator di dalam folder translations. masing masing messages.en.yml untuk bahasa Inggris dan file messages.id.yml untuk bahasa Indonesia, seperti berikut,

// translations/messages.en.yml
test: Hai, this is symfony framework

// translations/messages.id.yml
test: Hai, ini latihan symfony framework

pada contoh file diatas, yg sebelah kiri disebut key dan yang kanan adalah value. Kemudan buka file config/packages/framework.yaml dan tambahkan kode berikut :
framework:
    translator: { fallback: '%locale%' }
    secret: '%env(APP_SECRET)%'

kemudian buka file config/services.yaml. Kemudian lihat di bagian parameter berikut :
parameters:
    locale: 'id'

Pada potongan kode di atas, default bahasa / locale yang digunakan adalah id / Indonesia. Untuk menggunakan bahasa inggris, anda bisa mengganti value dari parameter locale dengan en. Untuk penggunaan di controller, sekarang kita buka file src/Controller/ApiController.php: 
<?php // src/Controller/ApiController.php

namespace App\Controller;

use App\Entity\MCategory;
use App\Controller\Base\BaseController;
use App\Form\MCategoryType;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Validator\Validator\ValidatorInterface;
/**
 * @Route("/api/test")
 */
class ApiController extends BaseController
{
    /**
     * @Route("/", name="api_index")
     */
    public function index(Request $request)
    {
        $queryBuilder = $this->getQueryBuilder(MCategory::class);
        $paginator = $this->createPaginator($request, $queryBuilder->getQuery());
        return $this->getPaginationData($paginator);
    }
    
    /**
     * @Route("/insert", name="api_insert", methods={"GET","POST"})
     */
    public function insert(Request $request, ValidatorInterface $validator)
    {
        $MCategory = new MCategory(); // membuat object MCategory
        if($request->getMethod() == Request::METHOD_POST) { // jalankan jika method POST
            $form = $this->createForm(MCategoryType::class, $MCategory); // membuat object form untuk menangkap inputan dari user
            $MCategory = $this->processForm($MCategory, $form, $request); // memanggil function proccessForm yang ada di BaseController untuk memproses data input dari user
            $valid = $MCategory instanceof MCategory;   // check apakah data yang dikirim valid / tidak
            if(!$valid){ // kirimkan pesan error jika data yang dikirim tidak valid
                return $this->getResponseSuccess($MCategory);
            }

            $result =["status" => true, "messages" => 'data saved successfully'];
            return $this->getResponseSuccess($MCategory);
        }
        $form = $this->createFormApi(MCategoryType::class, $MCategory); // membuat data form untuk ditampilkan ke user
        return $form;
    }
    
    /**
     * @Route("/update/{id}", name="api_update", methods={"GET","POST"})
     */
    public function update(MCategory $MCategory, Request $request)
    {
        if($request->getMethod() == Request::METHOD_POST) { // jalankan jika method == POST
            $form = $this->createForm(MCategoryType::class, $MCategory); // membuat object form untuk melakukan proses data
            $MCategory = $this->processForm($MCategory, $form, $request); // memanggil funcgsi processForm di BaseController untuk memproses data
            $valid = $MCategory instanceof MCategory;
            if(!$valid){
                return $this->getResponseSuccess($MCategory); // tampilkan pesan error jika ada error
            }

            $result =["status" => true, "messages" => 'data saved successfully'];
            return $this->getResponseSuccess($MCategory);
        }
        $form = $this->createFormApi(MCategoryType::class, $MCategory);
        return $this->getResponseSuccess($form);
    }
    
    /**
     * @Route("/delete/{id}", name="api_delete", methods={"DELETE"})
     */
    public function deleted(MCategory $MCategory)
    {
        // menghapus data 
        $entityManager = $this->getDoctrine()->getManager();
        $entityManager->remove($MCategory);
        $entityManager->flush();
        $data = ['status' => true, 'messages' => 'data berhasil dihapus'];
        return $this->getResponseSuccess($data);
    }
}

sebagai contoh kita akan ubah di function index, pertama tambahkan kode berikut untuk menggunakan translator:
<?php // src/Controller/ApiController.php

namespace App\Controller;

....
use Symfony\Component\Translation\TranslatorInterface;

kemudian ubah function index menjadi seperti berikut:
<?php //src/Controller/ApiController.php

namespace App\Controller;

...
use Symfony\Component\Translation\TranslatorInterface;
/**
 * @Route("/api/test")
 */
class ApiController extends BaseController
{
    /**
     * @Route("/", name="api_index")
     */
    public function index(Request $request, TranslatorInterface $translator)
    {
        return $translator->trans('test');
    }
    
}

kemudian panggil menggunakan POSTMAN / di browser, sehingga hasilnya sebagai berikut,

kemudian untuk mencoba bahasa inggris saya coba ganti parameter locale yang ada di file config/services.yaml menjadi en seperti berikut:
parameters:
    locale: 'en'

maka setelah saya coba lagi di browser / POSTMAN, maka hasilnya sebagai berikut:

mudah bukan ? sekarang kita perbaiki function kita yang lain agar bisa multi bahasa. Pertama kita buka file translation kita dan tambahkan menjadi seperti berikut :

// translations/messages.en.yml
test: Hai, this is symfony framework
save_success: Data saved successfully
update_success: Data updated successfully
delete_success: Data deleted successfully

// translations/messages.id.yml
test: Hai, ini latihan symfony framework
save_success: Data berhasil disimpan
update_success: Data berhasil diubah
delete_success: Data berhasil dihapus

kemudian kita ubah controller ApiController.php menjadi seperti berikut :

// function index, untuk index kita kembalikan seperti semula karena dalam contoh ini di dalam function index tidak ada label yang perlu di translate ke dalam multi bahasa

     /**
     * @Route("/", name="api_index")
     */
    public function index(Request $request)
    {
        $queryBuilder = $this->getQueryBuilder(MCategory::class);
        $paginator = $this->createPaginator($request, $queryBuilder->getQuery());
        return $this->getPaginationData($paginator);
    }

// function insert
     /**
     * @Route("/insert", name="api_insert", methods={"GET","POST"})
     */
    public function insert(Request $request, ValidatorInterface $validator, TranslatorInterface $translator)
    {
        $MCategory = new MCategory(); // membuat object MCategory
        if($request->getMethod() == Request::METHOD_POST) { // jalankan jika method POST
            $form = $this->createForm(MCategoryType::class, $MCategory); // membuat object form untuk menangkap inputan dari user
            $MCategory = $this->processForm($MCategory, $form, $request); // memanggil function proccessForm yang ada di BaseController untuk memproses data input dari user
            $valid = $MCategory instanceof MCategory;   // check apakah data yang dikirim valid / tidak
            if(!$valid){ // kirimkan pesan error jika data yang dikirim tidak valid
                return $this->getResponseSuccess($MCategory);
            }

            $result =["status" => true, "messages" => $translator->trans('save_success')];
            return $this->getResponseSuccess($MCategory);
        }
        $form = $this->createFormApi(MCategoryType::class, $MCategory); // membuat data form untuk ditampilkan ke user
        return $form;
    }

// function update
     /**
     * @Route("/update/{id}", name="api_update", methods={"GET","POST"})
     */
    public function update(MCategory $MCategory, Request $request, TranslatorInterface $translator)
    {
        if($request->getMethod() == Request::METHOD_POST) { // jalankan jika method == POST
            $form = $this->createForm(MCategoryType::class, $MCategory); // membuat object form untuk melakukan proses data
            $MCategory = $this->processForm($MCategory, $form, $request); // memanggil funcgsi processForm di BaseController untuk memproses data
            $valid = $MCategory instanceof MCategory;
            if(!$valid){
                return $this->getResponseSuccess($MCategory); // tampilkan pesan error jika ada error
            }

            $result =["status" => true, "messages" => $translator->trans('update_success')];
            return $this->getResponseSuccess($MCategory);
        }
        $form = $this->createFormApi(MCategoryType::class, $MCategory);
        return $this->getResponseSuccess($form);
    }

// function deleted
     /**
     * @Route("/delete/{id}", name="api_delete", methods={"DELETE"})
     */
    public function deleted(MCategory $MCategory, TranslatorInterface $translator)
    {
        // menghapus data 
        $entityManager = $this->getDoctrine()->getManager();
        $entityManager->remove($MCategory);
        $entityManager->flush();
        $data = ['status' => true, 'messages' => $translator->trans('delete_success')];
        return $this->getResponseSuccess($data);
    }

kemudian silahkan dicoba pakai POSTMAN. Mudah bukan ?

Sementara cukup sekian dulu tulisan saya kali ini, semoga bermanfaat. Untuk mengunduh project latihan ini anda bisa kunjungi akun github saya di https://github.com/kematjaya0/tutorial.

Untuk tulisan saya selanjutnya, insya allah saya lanjutkan untuk memasukkan translation pada url di browser. Sampai Jumpa...

Komentar

  1. kelinci99
    Togel Online Terpercaya Dan Games Laiinnya Live Casino.
    HOT PROMO NEW MEMBER FREECHIPS 5ribu !!
    NEXT DEPOSIT 50ribu FREECHIPS 5RB !!
    Ada Bagi2 Freechips Untuk New Member + Bonus Depositnya Loh ,
    Yuk Daftarkan Sekarang Mumpung Ada Freechips Setiap Harinya
    segera daftar dan bermain ya selain Togel ad juga Games Online Betting lain nya ,
    yang bisa di mainkan dgn 1 userid saja .
    yukk daftar di www.kelinci99.casino

    BalasHapus

Posting Komentar

Postingan populer dari blog ini

Contoh Perhitungan Algoritma Perceptron

      Melanjutkan tulisan saya sebelumnya tentang algoritma perceptron,kali ini saya akan menulis tentang conto perhitungan manual algoritma perceptron. Untuk contoh kasusnya saya menggunakan data logika AND. Cekidot.... Algoritma      Data yang kita gunakan sebagai contoh adalah data logika AND sebagai berikut: x1 x2 target 0 0 0 0 1 0 1 0 0 1 1 1       tentukan bobot awal secara acak, saya pakai contoh w1 = 0,w2 =0, learning rate = 1, bias = 0,maksimal epoh = 10. Disini saya memakai fungsi aktivasi undak biner. Epoh ke 1 Data ke satu x = {0,0}, bobot w = {0,0},b=0,target = 0 y_in = (x1*w1)+(x2*w2)+b = (0*0)+(0*0)+0 = 0 y = sign(0) = 1 karena y != target maka hitung error dan update bobot  error = target - y = 0 - 1 = -1 w1_baru = w1_lama +(learning_rate*error*x1)                = 0 + (1*(-1)*0) = 0 w2_baru = w2_lama +(learning_rate*error*x2)                = 0+(1*(-1)*0) = 0

Pemrograman Berorientasi Object - Overloading dan Overriding

       Function atau method overloading dan override adalah fitur yang sangat mendasar dan berguna dari bahasa OOP manapun. Dalam tutorial ini kita akan membahas implementasi metode overloading dan override di php. Di sini pertama kita akan membahas dasar-dasar overloading dan override. Setelah eksplorasi dasar kita akan menerapkan overloading dan override di php. Sebelum melangkah lebih jauh, saya mengasumsikan bahwa Anda memiliki pengetahuan dasar tentang class dan pewarisan di php. Anda juga memiliki pemahaman tentang magic method di php. Magic method karena overloading di php bisa di implmentasikan dengan menggunakan magic method. Overriding        Arti dasar dari overriding di OOP sama dengan arti kata sebenarnya. Dalam arti kata sebenarnya dari overriding adalah menggantikan perilaku orang tua yang sama pada anak. Ini sama dengan override method di OOP. Dalam arti OOP, override adalah mengganti method class induk di class anak. Atau dengan method kata kunci sederhana yang me

Contoh Perhitungan Algoritma Learning Vector Quantization

Melanjutkan tulisan saya tentang algoritma Learning Vector Quantization yang lalu, kali ini saya akan melanjutkan dengan contoh perhitungan manual. Berikut ini contoh data yang akan kita hitung. No X1 X2 X3 X4 target 1 0 1 1 0 0 2 0 0 1 1 1 3 1 1 1 1 0 4 1 0 0 1 1 pada contoh di atas, saya menggunakan 4 data sebagai data training beserta target yang bertujuan untuk mendapatkan bobot yang akan digunakan pada proses klasifikasi. Bobot awal adalah { 1, 1, 1, 0} dan { 1, 0, 1, 1} dengan learning rate 0,05 dengan fungsi pembelajaran = 0,1. Pelatihan Iterasi ke 1 1. Data ke 1 { 0, 1, 1, 0} dengan target 0, bobot = {{ 1, 1, 1, 0},{ 1, 0, 1, 1}}      - menghitung bobot untuk masing masing output :          kelas 0 = sqrt(((0-1)^2)+((1-1)^2)+((1-1)^2)+((0-0)^2)) = 1         kelas 1 = sqrt(((0-1)^2)+((1-0)^2)+((1-