Bagaimana cara menambahkan bahasa di php?

Membuat situs web atau aplikasi web Anda tersedia untuk audiens yang lebih luas sering kali mengharuskannya tersedia dalam berbagai bahasa. Untuk proyek non-Inggris, Anda dapat meningkatkan pemirsa dengan merilisnya dalam bahasa Inggris dan juga bahasa asli Anda. Akan tetapi, menginternasionalkan dan melokalkan proyek Anda menjadi proses yang jauh lebih mudah jika Anda memulainya sejak awal. Pada artikel ini, Insinyur Perangkat Lunak Toptal Igor Gomes dos Santos menunjukkan kepada kita cara memanfaatkan alat sederhana, seperti Gettext dan Poedit, untuk menginternasionalkan dan melokalkan proyek PHP

Oleh

Igor Santos

Dengan perhatian besar pada UI/UX, Igor adalah pengembang dengan latar belakang PHP yang kuat [10+ tahun], pindah ke JS-land untuk pengalaman yang lebih interaktif

BAGIKAN

BAGIKAN

Apakah Anda sedang membangun situs web atau aplikasi web lengkap, membuatnya dapat diakses oleh audiens yang lebih luas seringkali mengharuskannya tersedia dalam berbagai bahasa dan lokal

Perbedaan mendasar antara kebanyakan bahasa manusia membuat ini tidak mudah. Perbedaan dalam aturan tata bahasa, nuansa bahasa, format tanggal, dan lainnya digabungkan untuk membuat pelokalan menjadi tantangan yang unik dan tangguh

Pertimbangkan contoh sederhana ini

Aturan pluralisasi dalam bahasa Inggris cukup mudah. Anda dapat memiliki bentuk kata tunggal atau bentuk kata jamak

Namun, dalam bahasa lain – seperti bahasa Slavik – ada dua bentuk jamak selain bentuk tunggal. Anda bahkan dapat menemukan bahasa dengan total empat, lima, atau enam bentuk jamak, seperti dalam bahasa Slovenia, Irlandia, atau Arab

Cara kode Anda diatur, dan bagaimana komponen dan antarmuka Anda dirancang, memainkan peran penting dalam menentukan seberapa mudah Anda dapat melokalkan aplikasi Anda

Internasionalisasi [i18n] dari basis kode Anda, membantu memastikan bahwa itu dapat disesuaikan dengan bahasa atau wilayah yang berbeda dengan relatif mudah. Internasionalisasi biasanya dilakukan sekali, lebih disukai di awal proyek untuk menghindari perubahan besar dalam kode sumber di masa mendatang

Setelah basis kode Anda diinternasionalkan, pelokalan [l10n] menjadi masalah menerjemahkan konten aplikasi Anda ke bahasa/lokal tertentu

Pelokalan perlu dilakukan setiap kali bahasa atau wilayah baru perlu didukung. Juga, setiap kali bagian dari antarmuka [berisi teks] diperbarui, konten baru tersedia - yang kemudian perlu dilokalkan [i. e. , diterjemahkan] ke semua lokal yang didukung

Pada artikel ini, kita akan mempelajari cara menginternasionalkan dan melokalkan perangkat lunak yang ditulis dalam PHP. Kami akan membahas berbagai opsi implementasi dan berbagai alat yang tersedia untuk memudahkan prosesnya

Alat untuk Internasionalisasi

Cara termudah untuk menginternasionalkan perangkat lunak PHP adalah dengan menggunakan file array. Array akan diisi dengan string yang diterjemahkan, yang kemudian dapat dilihat dari dalam template

Namun, ini bukan cara yang direkomendasikan untuk proyek serius, karena pasti akan menimbulkan masalah pemeliharaan di kemudian hari. Beberapa masalah bahkan mungkin muncul di awal, seperti kurangnya dukungan untuk interpolasi variabel atau pluralisasi kata benda dan sebagainya.

Salah satu alat paling klasik [sering diambil sebagai referensi untuk i18n dan l10n] adalah alat Unix yang disebut Gettext

Meskipun berasal dari tahun 1995, ini masih merupakan alat komprehensif untuk menerjemahkan perangkat lunak yang juga mudah digunakan. Meskipun cukup mudah untuk memulai, ini masih memiliki alat pendukung yang kuat

Gettext adalah apa yang akan kita gunakan dalam posting ini. Kami akan menyajikan aplikasi GUI hebat yang dapat digunakan untuk memperbarui file sumber l10n Anda dengan mudah, sehingga menghindari kebutuhan untuk berurusan dengan baris perintah

Perpustakaan Untuk Memudahkan Segalanya

Ada kerangka kerja dan pustaka web utama PHP yang mendukung Gettext dan implementasi i18n lainnya. Beberapa lebih mudah dipasang daripada yang lain, atau menggunakan fitur tambahan atau mendukung format file i18n yang berbeda. Meskipun dalam dokumen ini, kami berfokus pada alat yang disediakan dengan inti PHP, berikut adalah daftar beberapa alat lain yang layak disebutkan

  • oscarotero/Gettext. Dukungan Gettext dengan antarmuka berorientasi objek; . Dapat juga mengekspor ke format yang lebih dari sekadar. bulan/. po, yang dapat berguna jika Anda perlu mengintegrasikan file terjemahan Anda ke bagian lain dari sistem, seperti antarmuka JavaScript

  • simfoni/terjemahan. Mendukung banyak format berbeda, tetapi merekomendasikan penggunaan XLIFF verbose. Tidak menyertakan fungsi pembantu atau ekstraktor bawaan, tetapi mendukung placeholder menggunakan strtr[] secara internal

  • zend/i18n. Mendukung file array dan INI, atau format Gettext. Menerapkan lapisan caching untuk menghindari keharusan membaca sistem file setiap saat. Juga termasuk view helper, dan filter input dan validator lokal-aware. Namun, itu tidak memiliki ekstraktor pesan

Kerangka kerja lain juga menyertakan modul i18n, tetapi tidak tersedia di luar basis kodenya

  • Laravel. Mendukung file array dasar;

  • Yii. Mendukung terjemahan berbasis larik, Getteks, dan basis data, serta menyertakan ekstraktor pesan. Didukung oleh ekstensi Intl, tersedia sejak PHP 5. 3, dan berdasarkan proyek ICU. Hal ini memungkinkan Yii menjalankan penggantian yang kuat, seperti mengeja angka, memformat tanggal, waktu, interval, mata uang, dan ordinal

Jika Anda memutuskan untuk menggunakan salah satu perpustakaan yang tidak menyediakan ekstraktor, Anda mungkin ingin menggunakan format Gettext, sehingga Anda dapat menggunakan toolchain Gettext asli [termasuk Poedit] seperti yang dijelaskan di sisa bab ini.

Menginstal Gettext

Anda mungkin perlu menginstal Gettext dan pustaka PHP terkait dengan menggunakan pengelola paket Anda, seperti apt-get atau yum. Setelah diinstal, aktifkan dengan menambahkan extension=gettext.so [Linux/Unix] atau extension=php_gettext.dll [Windows] ke file

msgid ""
msgstr ""
"Language: pt_BR\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Plural-Forms: nplurals=2; plural=[n > 1];\n"

msgid "We're now translating some strings"
msgstr "Nós estamos traduzindo algumas strings agora"

msgid "Hello %1$s! Your last visit was on %2$s"
msgstr "Olá %1$s! Sua última visita foi em %2$s"

msgid "Only one unread message"
msgid_plural "%d unread messages"
msgstr[0] "Só uma mensagem não lida"
msgstr[1] "%d mensagens não lidas"
0 Anda

Di sini kita juga akan menggunakan Poedit untuk membuat file terjemahan. Anda mungkin akan menemukannya di manajer paket sistem Anda;

Jenis File Gettext

Ada tiga jenis file yang biasanya Anda tangani saat bekerja dengan Gettext

Yang utama adalah file PO [Portable Object] dan MO [Machine Object], yang pertama adalah daftar "objek yang diterjemahkan" yang dapat dibaca dan yang kedua adalah biner yang sesuai [untuk ditafsirkan oleh Gettext saat melakukan lokalisasi]. Ada juga file POT [PO Template], yang berisi semua kunci yang ada dari file sumber Anda, dan dapat digunakan sebagai panduan untuk membuat dan memperbarui semua file PO

File template tidak wajib; . Anda akan memiliki sepasang file PO/MO per bahasa dan wilayah, tetapi hanya satu POT per domain

Memisahkan Domain

Ada beberapa kasus, dalam proyek besar, di mana Anda mungkin perlu memisahkan terjemahan ketika kata yang sama menyampaikan arti yang berbeda dalam konteks yang berbeda

Dalam kasus tersebut, Anda harus membaginya menjadi "domain" berbeda, yang pada dasarnya diberi nama grup file POT/PO/MO, dengan nama file adalah domain terjemahan tersebut

Proyek kecil dan menengah biasanya, untuk kesederhanaan, hanya menggunakan satu domain;

Dalam proyek Symfony, misalnya, domain digunakan untuk memisahkan terjemahan untuk pesan validasi

Kode Lokal

Lokal hanyalah kode yang mengidentifikasi satu versi bahasa. Ini ditentukan mengikuti spesifikasi ISO 639-1 dan ISO 3166-1 alpha-2. dua huruf kecil untuk bahasa, secara opsional diikuti dengan garis bawah dan dua huruf besar yang menunjukkan kode negara atau wilayah

Untuk bahasa langka, tiga huruf digunakan

Untuk beberapa pembicara, bagian negara mungkin terlihat berlebihan. Faktanya, beberapa bahasa memiliki dialek di berbagai negara, seperti Jerman Austria [de_AT] atau Portugis Brasil [pt_BR]. Bagian kedua digunakan untuk membedakan antara dialek tersebut - jika tidak ada, itu dianggap sebagai versi bahasa "generik" atau "hibrid"

Struktur Direktori

Untuk menggunakan Gettext, kita harus mematuhi struktur folder tertentu

Pertama, Anda harus memilih root arbitrer untuk file l10n Anda di repositori sumber Anda. Di dalamnya, Anda akan memiliki folder untuk setiap lokal yang diperlukan, dan folder “LC_MESSAGES” tetap yang berisi semua pasangan PO/MO Anda

Bentuk jamak

Seperti yang kami katakan di pendahuluan, bahasa yang berbeda mungkin menggunakan aturan pluralisasi yang berbeda. Namun, Gettext menyelamatkan kita dari masalah ini

Saat membuat yang baru. po, Anda harus mendeklarasikan aturan pluralisasi untuk bahasa tersebut, dan potongan terjemahan yang sensitif jamak akan memiliki bentuk yang berbeda untuk setiap aturan tersebut

Saat memanggil Gettext dalam kode, Anda harus menentukan nomor yang terkait dengan kalimat [mis. g. untuk frasa “Anda memiliki n pesan. ”, Anda harus menentukan nilai n], dan itu akan menghasilkan bentuk yang benar untuk digunakan - bahkan menggunakan substitusi string jika diperlukan

Aturan jamak terdiri dari jumlah aturan yang diperlukan dengan tes boolean untuk setiap aturan [tes untuk paling banyak satu aturan dapat dihilangkan]. Sebagai contoh

  • Jepang.

    msgid ""
    msgstr ""
    "Language: pt_BR\n"
    "Content-Type: text/plain; charset=UTF-8\n"
    "Plural-Forms: nplurals=2; plural=[n > 1];\n"
    
    msgid "We're now translating some strings"
    msgstr "Nós estamos traduzindo algumas strings agora"
    
    msgid "Hello %1$s! Your last visit was on %2$s"
    msgstr "Olá %1$s! Sua última visita foi em %2$s"
    
    msgid "Only one unread message"
    msgid_plural "%d unread messages"
    msgstr[0] "Só uma mensagem não lida"
    msgstr[1] "%d mensagens não lidas"
    
    _1 - satu aturan. tidak ada bentuk jamak

  • Bahasa inggris.

    msgid ""
    msgstr ""
    "Language: pt_BR\n"
    "Content-Type: text/plain; charset=UTF-8\n"
    "Plural-Forms: nplurals=2; plural=[n > 1];\n"
    
    msgid "We're now translating some strings"
    msgstr "Nós estamos traduzindo algumas strings agora"
    
    msgid "Hello %1$s! Your last visit was on %2$s"
    msgstr "Olá %1$s! Sua última visita foi em %2$s"
    
    msgid "Only one unread message"
    msgid_plural "%d unread messages"
    msgstr[0] "Só uma mensagem não lida"
    msgstr[1] "%d mensagens não lidas"
    
    _2 - dua aturan. gunakan bentuk jamak hanya jika n bukan 1, jika tidak, gunakan bentuk tunggal

  • Bahasa portugis brazil.

    msgid ""
    msgstr ""
    "Language: pt_BR\n"
    "Content-Type: text/plain; charset=UTF-8\n"
    "Plural-Forms: nplurals=2; plural=[n > 1];\n"
    
    msgid "We're now translating some strings"
    msgstr "Nós estamos traduzindo algumas strings agora"
    
    msgid "Hello %1$s! Your last visit was on %2$s"
    msgstr "Olá %1$s! Sua última visita foi em %2$s"
    
    msgid "Only one unread message"
    msgid_plural "%d unread messages"
    msgstr[0] "Só uma mensagem não lida"
    msgstr[1] "%d mensagens não lidas"
    
    _3 - dua aturan, gunakan bentuk jamak hanya jika n lebih besar dari 1, jika tidak, gunakan bentuk tunggal

Untuk penjelasan yang lebih dalam, tersedia informasi online

Gettext akan menentukan aturan mana yang akan digunakan berdasarkan nomor yang disediakan dan akan menggunakan versi string yang dilokalkan dengan benar. Untuk string di mana pluralisasi perlu ditangani, Anda harus menyertakannya di. po mengajukan kalimat yang berbeda untuk setiap aturan jamak yang ditentukan

Implementasi Sampel

Setelah semua teori itu, mari kita sedikit praktis. Berikut kutipan dari a. po [jangan terlalu khawatir tentang sintaks, tetapi cukup pahami keseluruhan konten]

msgid ""
msgstr ""
"Language: pt_BR\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Plural-Forms: nplurals=2; plural=[n > 1];\n"

msgid "We're now translating some strings"
msgstr "Nós estamos traduzindo algumas strings agora"

msgid "Hello %1$s! Your last visit was on %2$s"
msgstr "Olá %1$s! Sua última visita foi em %2$s"

msgid "Only one unread message"
msgid_plural "%d unread messages"
msgstr[0] "Só uma mensagem não lida"
msgstr[1] "%d mensagens não lidas"
_

Bagian pertama berfungsi seperti tajuk, dengan

msgid ""
msgstr ""
"Language: pt_BR\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Plural-Forms: nplurals=2; plural=[n > 1];\n"

msgid "We're now translating some strings"
msgstr "Nós estamos traduzindo algumas strings agora"

msgid "Hello %1$s! Your last visit was on %2$s"
msgstr "Olá %1$s! Sua última visita foi em %2$s"

msgid "Only one unread message"
msgid_plural "%d unread messages"
msgstr[0] "Só uma mensagem não lida"
msgstr[1] "%d mensagens não lidas"
4 dan
msgid ""
msgstr ""
"Language: pt_BR\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Plural-Forms: nplurals=2; plural=[n > 1];\n"

msgid "We're now translating some strings"
msgstr "Nós estamos traduzindo algumas strings agora"

msgid "Hello %1$s! Your last visit was on %2$s"
msgstr "Olá %1$s! Sua última visita foi em %2$s"

msgid "Only one unread message"
msgid_plural "%d unread messages"
msgstr[0] "Só uma mensagem não lida"
msgstr[1] "%d mensagens não lidas"
5 kosong

Ini menjelaskan pengkodean file, bentuk jamak, dan beberapa hal lainnya. Bagian kedua menerjemahkan string sederhana dari bahasa Inggris ke Portugis Brasil, dan bagian ketiga melakukan hal yang sama, tetapi memanfaatkan penggantian string dari

msgid ""
msgstr ""
"Language: pt_BR\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Plural-Forms: nplurals=2; plural=[n > 1];\n"

msgid "We're now translating some strings"
msgstr "Nós estamos traduzindo algumas strings agora"

msgid "Hello %1$s! Your last visit was on %2$s"
msgstr "Olá %1$s! Sua última visita foi em %2$s"

msgid "Only one unread message"
msgid_plural "%d unread messages"
msgstr[0] "Só uma mensagem não lida"
msgstr[1] "%d mensagens não lidas"
6, memungkinkan terjemahan berisi nama pengguna dan tanggal kunjungan

Bagian terakhir adalah contoh bentuk pluralisasi, menampilkan versi tunggal dan jamak sebagai

msgid ""
msgstr ""
"Language: pt_BR\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Plural-Forms: nplurals=2; plural=[n > 1];\n"

msgid "We're now translating some strings"
msgstr "Nós estamos traduzindo algumas strings agora"

msgid "Hello %1$s! Your last visit was on %2$s"
msgstr "Olá %1$s! Sua última visita foi em %2$s"

msgid "Only one unread message"
msgid_plural "%d unread messages"
msgstr[0] "Só uma mensagem não lida"
msgstr[1] "%d mensagens não lidas"
4 dalam bahasa Inggris dan terjemahannya sebagai
msgid ""
msgstr ""
"Language: pt_BR\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Plural-Forms: nplurals=2; plural=[n > 1];\n"

msgid "We're now translating some strings"
msgstr "Nós estamos traduzindo algumas strings agora"

msgid "Hello %1$s! Your last visit was on %2$s"
msgstr "Olá %1$s! Sua última visita foi em %2$s"

msgid "Only one unread message"
msgid_plural "%d unread messages"
msgstr[0] "Só uma mensagem não lida"
msgstr[1] "%d mensagens não lidas"
5 0 dan 1 [mengikuti nomor yang diberikan oleh aturan jamak]

Disitu juga digunakan string replacement, jadi angkanya bisa dilihat langsung di kalimat, dengan menggunakan

msgid ""
msgstr ""
"Language: pt_BR\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Plural-Forms: nplurals=2; plural=[n > 1];\n"

msgid "We're now translating some strings"
msgstr "Nós estamos traduzindo algumas strings agora"

msgid "Hello %1$s! Your last visit was on %2$s"
msgstr "Olá %1$s! Sua última visita foi em %2$s"

msgid "Only one unread message"
msgid_plural "%d unread messages"
msgstr[0] "Só uma mensagem não lida"
msgstr[1] "%d mensagens não lidas"
9. Bentuk jamak selalu memiliki dua
msgid ""
msgstr ""
"Language: pt_BR\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Plural-Forms: nplurals=2; plural=[n > 1];\n"

msgid "We're now translating some strings"
msgstr "Nós estamos traduzindo algumas strings agora"

msgid "Hello %1$s! Your last visit was on %2$s"
msgstr "Olá %1$s! Sua última visita foi em %2$s"

msgid "Only one unread message"
msgid_plural "%d unread messages"
msgstr[0] "Só uma mensagem não lida"
msgstr[1] "%d mensagens não lidas"
_4 [tunggal dan jamak], jadi disarankan untuk tidak menggunakan bahasa yang rumit sebagai sumber terjemahan

Kunci Lokalisasi

Seperti yang mungkin Anda perhatikan, kami menggunakan kalimat bahasa Inggris yang sebenarnya sebagai ID sumber.

msgid ""
msgstr ""
"Language: pt_BR\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Plural-Forms: nplurals=2; plural=[n > 1];\n"

msgid "We're now translating some strings"
msgstr "Nós estamos traduzindo algumas strings agora"

msgid "Hello %1$s! Your last visit was on %2$s"
msgstr "Olá %1$s! Sua última visita foi em %2$s"

msgid "Only one unread message"
msgid_plural "%d unread messages"
msgstr[0] "Só uma mensagem não lida"
msgstr[1] "%d mensagens não lidas"
_4 itu sama digunakan di semua milik Anda. po file, artinya bahasa lain akan memiliki format yang sama dan bidang
msgid ""
msgstr ""
"Language: pt_BR\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Plural-Forms: nplurals=2; plural=[n > 1];\n"

msgid "We're now translating some strings"
msgstr "Nós estamos traduzindo algumas strings agora"

msgid "Hello %1$s! Your last visit was on %2$s"
msgstr "Olá %1$s! Sua última visita foi em %2$s"

msgid "Only one unread message"
msgid_plural "%d unread messages"
msgstr[0] "Só uma mensagem não lida"
msgstr[1] "%d mensagens não lidas"
4 yang sama tetapi diterjemahkan
msgid ""
msgstr ""
"Language: pt_BR\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Plural-Forms: nplurals=2; plural=[n > 1];\n"

msgid "We're now translating some strings"
msgstr "Nós estamos traduzindo algumas strings agora"

msgid "Hello %1$s! Your last visit was on %2$s"
msgstr "Olá %1$s! Sua última visita foi em %2$s"

msgid "Only one unread message"
msgid_plural "%d unread messages"
msgstr[0] "Só uma mensagem não lida"
msgstr[1] "%d mensagens não lidas"
5 baris

Berbicara tentang kunci terjemahan, ada dua pendekatan "filosofis" standar di sini

1. msgstr sebagai kalimat sebenarnya

Keuntungan utama dari pendekatan ini adalah

  • Jika ada bagian dari perangkat lunak yang tidak diterjemahkan dalam bahasa tertentu, kunci yang ditampilkan akan tetap mempertahankan beberapa arti. Misalnya, jika Anda tahu cara menerjemahkan dari bahasa Inggris ke bahasa Spanyol tetapi memerlukan bantuan untuk menerjemahkan ke bahasa Prancis, Anda dapat memublikasikan halaman baru dengan kalimat bahasa Prancis yang hilang, dan bagian dari situs web akan ditampilkan dalam bahasa Inggris sebagai gantinya

  • Jauh lebih mudah bagi penerjemah untuk memahami apa yang terjadi dan membuat terjemahan yang tepat berdasarkan

    msgid ""
    msgstr ""
    "Language: pt_BR\n"
    "Content-Type: text/plain; charset=UTF-8\n"
    "Plural-Forms: nplurals=2; plural=[n > 1];\n"
    
    msgid "We're now translating some strings"
    msgstr "Nós estamos traduzindo algumas strings agora"
    
    msgid "Hello %1$s! Your last visit was on %2$s"
    msgstr "Olá %1$s! Sua última visita foi em %2$s"
    
    msgid "Only one unread message"
    msgid_plural "%d unread messages"
    msgstr[0] "Só uma mensagem não lida"
    msgstr[1] "%d mensagens não lidas"
    
    4

  • Ini memberi Anda l10n "gratis" untuk satu bahasa - sumbernya

Di sisi lain, kerugian utamanya adalah, jika Anda perlu mengubah teks yang sebenarnya, Anda perlu mengganti

msgid ""
msgstr ""
"Language: pt_BR\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Plural-Forms: nplurals=2; plural=[n > 1];\n"

msgid "We're now translating some strings"
msgstr "Nós estamos traduzindo algumas strings agora"

msgid "Hello %1$s! Your last visit was on %2$s"
msgstr "Olá %1$s! Sua última visita foi em %2$s"

msgid "Only one unread message"
msgid_plural "%d unread messages"
msgstr[0] "Só uma mensagem não lida"
msgstr[1] "%d mensagens não lidas"
4 yang sama di beberapa file bahasa

2. msgid sebagai kunci yang unik dan terstruktur

Ini akan menjelaskan peran kalimat dalam aplikasi secara terstruktur, termasuk templat atau bagian tempat string berada, bukan kontennya

Ini adalah cara yang bagus untuk mengatur kode, memisahkan konten teks dari logika template. Namun, hal itu dapat menimbulkan masalah bagi penerjemah yang kehilangan konteksnya

File bahasa sumber akan dibutuhkan sebagai dasar untuk terjemahan lainnya. Misalnya, pengembang idealnya memiliki “en. po”, yang akan dibaca oleh penerjemah untuk memahami apa yang harus ditulis dalam “fr. po”

Terjemahan yang hilang akan menampilkan tombol yang tidak berarti di layar [“top_menu. selamat datang" bukan "Halo, Pengguna. ” di halaman Prancis yang tidak diterjemahkan tersebut]

Itu bagus karena akan memaksa terjemahan selesai sebelum diterbitkan - tetapi buruk karena masalah terjemahan akan sangat buruk di antarmuka. Namun, beberapa perpustakaan menyertakan opsi untuk menentukan bahasa yang diberikan sebagai "fallback", yang memiliki perilaku serupa dengan pendekatan lainnya

Manual Gettext lebih menyukai pendekatan pertama karena, secara umum, lebih mudah bagi penerjemah dan pengguna jika ada masalah. Itulah pendekatan yang akan kami gunakan di sini juga

Perlu dicatat, bagaimanapun, bahwa dokumentasi Symfony mendukung terjemahan berbasis kata kunci, untuk memungkinkan perubahan independen dari semua terjemahan tanpa mempengaruhi template juga.

Penggunaan Sehari-hari

Dalam aplikasi umum, Anda akan menggunakan beberapa fungsi Gettext saat menulis teks statis di halaman Anda

Kalimat-kalimat itu kemudian akan muncul di. po file, diterjemahkan, dikompilasi menjadi. mo, dan kemudian digunakan oleh Gettext saat merender antarmuka yang sebenarnya. Mengingat itu, mari kita satukan apa yang telah kita diskusikan sejauh ini dalam contoh langkah demi langkah

1. Contoh file template, termasuk beberapa panggilan gettext yang berbeda


Bài mới nhất

Chủ Đề