Negoisiasi bahasa hanya di /, dan biarkan URL eksplisit seperti /en/ dan /fr/ sentiasa melayani bahasa yang dinamakan mereka. Panduan ini menunjukkan kepada penerbit desktop Mac bagaimana untuk menentukan tingkah laku itu, mengekalkan pautan dokumen yang boleh dikesan, dan menguji keputusan.

Contoh yang dikaji adalah koleksi dokumen awam sintetik dengan versi Bahasa Inggeris dan Bahasa Perancis untuk panduan ringkas mengatur bentuk. Akarnya adalah halaman pemilihan bahasa yang teks perkenalannya boleh beradaptasi dengan permintaan. Semua alamat contoh menggambarkan susunan yang dicadangkan; mereka bukan tuntutan tentang halaman yang sedang dihosting di alamat-alamat itu.

Tentukan Kelakuan URL Sebelum Menukar Tetapan Bahasa

Mula dengan kontrak laluan kecil. Dalam contoh ini, akar membantu pembaca memilih bahasa, manakala dua laluan eksplisit mengandungi dokumen terjemahan lengkap. Google menyyorkan URL berasingan untuk versi bahasa dan menasihatkan melawan alih arah automatik pembaca di antara versi tersebut berdasarkan bahasa yang diasumsikan. Pautan nampak membiarkan pembaca membuat pilihan mereka sendiri. Mengurus laman multiregional dan multibahasa.

Laluan Diminta Respon Diharapkan Kesan Keutamaan Bahasa
/ Pemilih bahasa dengan pengenalan ringkas Boleh menukar pengenalan dan pautan dicadangkan
/en/ Dokumen Bahasa Inggeris lengkap Tiada perubahan ke bahasa dokumen
/fr/ Dokumen Bahasa Perancis lengkap Tiada perubahan ke bahasa dokumen
Laluan tidak diterbitkan Respons halaman hilang Tidak boleh diam-diam menjadi dokumen yang berbeza

Lakukan jadual ini sebagai ringkasan pelaksanaan. Terapkan pemilihan bahasa hanya selepas memeriksa sama ada permintaan menyasarkan akar. Peraturan am yang berjalan sebelum setiap permintaan halaman boleh mengatasi pilihan eksplistik dan memecahkan kontrak.

Contohnya, seseorang yang mengikuti /fr/ masih harus menerima dokumen Perancis apabila permintaan mereka menggemari Bahasa Inggeris. Keutamaan Bahasa Inggeris berguna pada titik masuk yang belum diputuskan; laluan eksplistik sudah menyediakan keputusan di tempat lain. Keutamaan ini adalah syarat reka bentuk yang digunakan di seluruh artikel ini.

Kekalkan kedua-dua pautan bahasa nampak pada setiap halaman. Pada akar, bahasa yang dicadangkan boleh memudahkan pilihan pertama tanpa menyembunyikan pilihan lain. Pada dokumen lengkap, penukar harus membawa terus ke dokumen yang setara.

Pilih Dasar Bahasa Akar Yang Dapat Diramlah

Accept-Language mengekspresikan bahasa respons yang digemari, dengan bobot kualiti seperti fr;q=0.9,en;q=0.5. Ia tidak memerlukan pelayan untuk menyediakan setiap bahasa yang diminta. Nilai kualiti sifar bermaksud tidak diterima. Content-Language menggambarkan khalayak yang dimaksudkan bagi representasi yang dikembalikan; ia tidak memilih laluan. RFC 9110: Semantik HTTP, seksyen 8.5, 12.4.2 dan 12.5.4.

Tulis set bahasa yang disokong dan fallback sebelum mengonfigurasi apa-apa. Untuk contoh ini, gunakan pengenalan Bahasa Inggeris dan Bahasa Perancis, dengan pengenalan Bahasa Inggeris dan kedua-dua pilihan bahasa apabila permintaan tidak menyediakan padanan yang boleh digunakan. Fallback itu adalah pilihan penerbitan ilustratif, bukan keperluan HTTP.

Gunakan pelaksanaan padanan bahasa dengan polisi eksplisit. RFC 4647 membezakan penapisan dari pencarian: pencarian memilih satu keputusan, menganggarkan julat yang diminta mengikut keutamaan, dan secara beransur-ansur mengeluarkan subtag semasa mencari padanan. Ia juga memerlukan aplikasi yang menggunakan pencarian untuk mentakrifkan tingkah laku lalai mereka. Oleh itu, permintaan untuk fr-CA boleh mencapai pengenalan generik fr yang disokong melalui pencarian. RFC 4647: Padanan Tag Bahasa, seksyen 3.4–3.4.1.

Jangan pilih bahasa dengan mencari header untuk kemunculan pertama fr atau en. Jalan pintas itu terlepas bobot dan pengecualian. Lapisan padanan harus mengurai keutamaan, mengira pengecualian bobot sifar, dan kemudian menggunakan fallback yang didokumentasikan.

Keutamaan Permintaan Akar Keputusan Diharapkan Dalam Contoh Ini
Header tidak hadir Pengenalan Bahasa Inggeris dengan kedua-dua pilihan
fr Pengenalan Bahasa Perancis dengan kedua-dua pilihan
fr-CA,fr;q=0.9,en;q=0.5 Pengenalan Bahasa Perancis
en;q=0.9,fr;q=0.2 Pengenalan Bahasa Inggeris
de Pemilih fallback
fr;q=0,en;q=1 Pengenalan Bahasa Inggeris; Bahasa Perancis tidak dipilih
*;q=0 Penanganan bahasa tidak sepadan yang ditakrifkan secara eksplisit

Baris terakhir memerlukan keputusan yang sengaja. Untuk reka bentuk pemilih ini, tentukan bahawa permintaan semua-dikekalkan menerima pemilih fallback kerana aplikasi menolak untuk menghormati keutamaan itu, bukan mendakwa bahawa Bahasa Inggeris sepadan dengannya. Jika negoisiasi ketat diperlukan, takrifkan dan uji tingkah laku respons tidak diterima yang berkenaan. Sama ada cara, elakkan secara tidak sengaja memperlakukan sifar sebagai keutamaan rendah biasa.

Kekalkan Bahasa Dokumen, Pautan Dan Anotasi Carian Selaras

Bagi setiap dokumen HTML, tetapkan atribut lang dokumen ke bahasa utamanya yang sebenar: en untuk halaman Bahasa Inggeris dan fr untuk halaman Bahasa Perancis. WHATWG mentakrifkan lang sebagai bahasa utama kandungan unsur dan atribut yang membawa teks, dengan pewarisan dari ibu bapa apabila dihapuskan. Awalan bahasa sahaja tidak melaksanakan deklarasi ini. Standard HTML: Atribut lang dan xml:lang.

Semak pautan navigasi serta teks halaman. URL relatif diselesaikan terhadap URL asas di bawah Standard URL WHATWG. Contohnya, tanpa asas dokumen yang berbeza, fr/ dari https://example.com/en/ diselesaikan kepada https://example.com/en/fr/; /fr/ diselesaikan ke laluan Perancis asal. Gunakan laluan mutlak yang dimaksudkan untuk penukar yang nampak. Standard URL: Penulisan dan Penguraian URL.

Anotasi carian mempunyai tujuan berasingan. Google menyokong anotasi bahasa setara melalui HTML, header HTTP atau peta laman. Pilih satu kaedah yang boleh diurus. Setiap versi harus mengenal pasti diri sendiri dan pasangannya dengan URL yang sepenuhnya berkualiti, dan versi-versi itu harus mengait kembali satu sama lain melalui anotasi tersebut. Pemilih akar boleh menjadi destinasi x-default. Beritahu Google tentang versi tempatan halaman anda.

Bagi koleksi sintetik, pemetaan anotasi adalah:

Anotasi Destinasi Sintetik
en https://example.com/en/
fr https://example.com/fr/
x-default https://example.com/

Masukkan hubungan-hubungan itu melalui mekanisme anotasi yang disokong oleh sistem penerbitan. Pemetaan itu adalah spesifikasi, bukan markup yang boleh dilaksanakan. x-default tidak mengonfigurasi negoisiasi pelayan atau menyediakan terjemahan. Google juga menyatakan bahawa ia menentukan bahasa halaman secara algoritma bukannya menggunakan hreflang atau HTML lang untuk mengesannya. Beritahu Google tentang versi tempatan halaman anda.

Kekalkan terjemahan lengkap yang boleh diakses secara berasingan dari penyesuaian akar. Google mendokumentasikan bahawa penjelajah webnya menghantar permintaan tanpa Accept-Language, dan mengamarkan bahawa halaman adaptif-lokales mungkin meninggalkan beberapa variasi tidak dikesan. Fallback yang dapat dipercayai dan URL bahasa terus menyelesaikan masalah penemuan itu tanpa memerlukan penjelajah web untuk meminta pengenalan akar yang berbeza. Bagaimana Google menjelajah halaman adaptif-lokales.

Jadikan Respons Akar Tercache Menghormati Pilihan Bahasa

Apabila pemilihan akar bergantung pada Accept-Language, masukkan Vary: Accept-Language pada respons akar, termasuk fallback. Kekalkan medan variasi sedia ada. Respons akar Perancis ilustratif akan mengandungi fragmen header berikut; ia bukan mesej HTTP yang lengkap: RFC 9110: Semantik HTTP, seksyen 12.5.5.

Content-Type: text/html; charset=utf-8
Content-Language: fr
Vary: Accept-Language

RFC 9111 menghendaki cache untuk mencocokkan medan permintaan yang dinamakan oleh Vary sebelum menggunakan semula respons yang disimpan tanpa penaksiran semula. Ini penting kerana URL akar kekal sama manakala pengenalannya berubah. Vary menggambarkan input pemilihan; ia tidak melaksanakan pemadanan bahasa. RFC 9111: Pencachan HTTP, seksyen 4.1.

Bagi /en/ dan /fr/, reka bentuk ini tidak mengubah dokumen mengikut Accept-Language. Semak laluan penghantaran penuh, termasuk cache yang dikongsi, terhadap kontrak laluan. Sebagai diagnosis praktikal, gantikan permintaan akar Bahasa Inggeris dan Bahasa Perancis, kemudian terbalikkan urutan mereka. Akar yang berulang kali mengembalikan bahasa yang diminta sebelumnya adalah sebab untuk memeriksa tingkah laku cache dan laluan bersama.

Uji Kontrak Dari Mac

Sediakan tiga halaman sintetik pada asal demonstrasi awam terlebih dahulu. Ujian di bawah memerlukan asal itu hanya mengandungi koleksi demonstrasi di /, /en/ dan /fr/. Ia tidak mencipta halaman atau mengonfigurakan hos. Alamat example.com ilustratif di atas bukan pemasangan ujian yang berfungsi.

Buka aplikasi Terminal Mac dan jalankan curl --version untuk mengesahkan curl tersedia. Kemudian tampal diagnosis shell lengkap berikut. Apabila diminta, masukkan asal demonstrasi, termasuk https://, tanpa laluan atau garis miring di hujung.

printf 'Public demo origin, without a trailing slash: '
IFS= read -r demo_origin
case "$demo_origin" in
  https://*) ;;
  *) printf 'Enter an HTTPS origin.\n' >&2; exit 1 ;;
esac

for demo_path in / /en/ /fr/; do
  for demo_language in '' 'en' 'fr' 'fr-CA,fr;q=0.9,en;q=0.5' 'en;q=0.9,fr;q=0.2' 'de' 'fr;q=0,en;q=1'; do
    printf '\nPath: %s | Accept-Language: %s\n' \
      "$demo_path" "${demo_language:-absent}"
    curl --silent --show-error --connect-timeout 5 --max-time 15 \
      --dump-header - --header "Accept-Language: $demo_language" \
      "$demo_origin$demo_path" || exit 1
  done
done

Diagnostik ini mencetak header dan badan respons. --header Curl menyediakan keutamaan; nilai kosong membuang header itu. --dump-header - mencetak header ke output piawai, dan had masa mengikat setiap pemindahan. Mengikuti alih arah sengaja tidak hadir supaya alih arah yang tidak dijangka kekal nampak. curl — Cara Menggunakan.

Sintaks shell skrip telah diperiksa; tiada pelaksanaan demonstrasi atau keputusan laluan bahasa langsung diklaim di sini. Ia berhenti pada kegagalan pemindahan curl, tetapi respons ralat HTTP masih boleh muncul dalam outputnya dan harus diperiksa.

Bandingkan respons akar dengan jadual keutamaan. Kemudian periksa setiap respons /en/ untuk kandungan Bahasa Inggeris dan setiap respons /fr/ untuk kandungan Bahasa Perancis, tidak kira keutamaan yang disediakan. Semak kod status, medan Location tidak dijangka, deklarasi bahasa yang dikembalikan, dan teks dokumen sebenar. Header yang betul dengan badan yang salah tetap merupakan keputusan gagal.

Akhirnya, buka kedua-dua URL eksplisit dalam pelayar. Ikuti setiap penukar bahasa, muat semula destinasi, dan semak bar alamat. Ini mengesan kesilapan navigasi yang permintaan terus yang berjaya akan terlepas. Uji laluan tidak diterbitkan secara berasingan dan sahkan bahawa ia tidak diam-diam memaparkan salah satu dokumen lengkap.

Gunakan Pemilih Stabil Apabila Negoisiasi Tidak Tersedia

Rekabentuk ini memerlukan lapisan penyampaian yang mampu membaca header permintaan dan memilih respons. Mekanisme bahasa-dokumen dan URL WHATWG menggambarkan dokumen dan alamat; menambah atribut lang atau menukar teks pautan tidak sendiri mencipta negoisiasi HTTP. Pemilihan bergantung-permintaan berada dalam konfigurasi penghantaran HTTP. Standard HTML, RFC 9110: Semantik HTTP.

Jika sistem penerbitan tidak menawarkan keupayaan penyampaian sedemikian, gunakan pemilih akar tetap dengan pautan terus ke halaman bahasa lengkap. Itu mengekalkan keupayaan pembaca untuk memilih dan mengikuti syor Google untuk URL bahasa berasingan dan pautan penukaran nampak. Ciri negoisiasi produk penerbitan tertentu tidak diasumsikan di sini. Mengurus laman multiregional dan multibahasa.

Kriteria penerimaan praktikal adalah mudah: keutamaan boleh membantu di akar, manakala pautan bahasa eksplistik kekal destinasi yang dapat dipercayai. Tamatkan dengan fallback yang didokumentasikan, deklarasi dokumen yang sepadan, anotasi bahasa timbal balik, dan bukti permintaan-demi-permintaan bahawa kontrak laluan pegang.

Sumber