Dylunio Gwefannau Dwyieithog - Rhan 1: Setio'r Iaith
Os ydych am gynhyrchu gwefannau dwyieithog neu aml-ieithog, mae sawl ffordd o'u dylunio. Mae manteision ac anfanteision i bob un ohonynt.
Datrysiadau: pHp syml :: javascript a cwcis :: ffolderi dyblyg
Canllawiau Iaith
- Cyflwyniad
- Rhan 1: setio iaith
- Rhan 2: storio data iaith
- Rhan 3: fflagiau/eiconau
- Rhan 4: gosod ffolderi
Datrysiad syml pHp (iaith ochr-gweinyddwr)
Os ydy eich gwefan yn gallu defnyddio iaith pHp, gall y sgript isod wneud byd o wahaniaeth. Rhowch y sgript uwchben y DTD, e.e.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
ar y cychwyn.
<?php
session_start(); //[1]
$iaith_ddiofyn = "cy"; //[2]
if(isset($_SESSION['iaith'])){ //[3]
$iaith = $_SESSION['iaith']; //[4]
}else{
if(isset($_COOKIE['iaith'])){ //[5]
$iaith = $_COOKIE['iaith'];
}
}
if(isset($_GET['iaith'])){ //[6]
if($_GET['iaith'] == "en" || $_GET['iaith'] == "cy"){ //[7]
$iaith = $_GET['iaith'];
}
}
if(!isset($iaith))$iaith = $iaith_ddiofyn; //[8]
$_SESSION['iaith'] = $iaith; //[9]
setcookie('iaith', $iaith, time() + 36000000); //[10]
?>
- Os ydych yn defnyddio newidynnau $_SESSION['...'], mae'n rhaid dechrau gyda'r datganiad hwn ym mhob tudalen - er gallwch roi'r sgript hwn mewn ffeil ar ben ei hun a'i galw gyda datganiad "include" (gweler wedyn).
- Nodi'r iaith ddiofyn (default) fel Cymraeg ('cy').
- Gwirio os yw'r iaith wedi'i setio eisoes.
- Os ydyw - setio'r newidyn tudalen ($iaith) i'r gwerth blaenorol.
- Os ydy'r defnyddiwr wedi bod yma o'r blaen, gall cwci gadw'i iaith - felly darllen hwn.
- Gwirio i weld os oes dolen wedi'i phwyso gyda iaith yn yr url, e.e. "http://www.wetwork.org.uk/index.php?iaith=cy"
- Os yw'r iaith yn y rhestr - setio i'r iaith honno. Wrth gwrs, gallwch ychwanegu mwy o ieithoedd gyda ' || $_GET['iaith'] == "it"' ac yn y blaen.
- Ar ddiwedd hwnna i gyd, os oes iaith dal heb ei phenodi - setio i'r iaith ddiofyn.
- Setio'r newidyn $_SESSION er mwyn hwyluso cadw'r iaith ar y dudalen nesaf.
- Setio'r cwci er mwyn cofio'r iaith ar gyfer yr ymweliad nesaf.
** Mae'n bwysig i nodi gall y data (ieithoedd) ar [2] a [7] ddod o ddatabas. **
Datrysiad javascript a cwcis
Os nac oes pHp/MySQL ar gael chi, gallwch ddefnyddio javascript a cwcis. Yn anffodus, y defnyddiwr sydd â rheolaeth dros y ddau hyn.
Os nac ydy agweddau o javascript neu gwcis yn cael eu caniatáu, ni fydd y sustem yn gweithio o gwbl.
Mae'r sgript yn gweithio trwy guddio ieithoedd anactif. Mae'r holl wybodaeth ym mhob iaith yn cael ei llwytho yn gyntaf ac yna mae'r javascript yn cuddio'r cynnwys ddim ei angen. Er bod hwn yn arafu'r llwytho yn wreiddiol, mae newid iaith yn ofnadwy o gyflym oherwydd bod y cynnwys wedi'i lwytho eisoes. Gallwch osod iaith ddiofyn yn y sgript. Unwaith i'r sgript redeg, mae cwci yn cael ei greu/ail-greu ar sustem y defnyddiwr ac mae hwn yn storio'r wybodaeth wrth iddo symud o dudalen i dudalen. Yn ogystal â hyn, bydd y cwci yn sicrhau bod yr iaith gywir yn ymddangos y tro nesaf mae'r defnyddiwr yn dychwelyd.
function newidIaith(gwerth) {
var iaith_ddewisol = gwerth;
var iaith_ddiofyn = "cy";
if(iaith_ddewisol === "cy" || iaith_ddewisol === "en" || iaith_ddewisol === "it"){
document.cookie = "iaith="+escape(iaith_ddewisol);
} else {
document.cookie = "iaith="+escape(iaith_ddiofyn);
}
newid = newidGolwg();
}
function darllenIaith(){
var name = "iaith";
var start = document.cookie.indexOf( name + "=" );
var len = start + name.length + 1;
if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
iaith = "cy";
}
if ( start == -1 ) iaith = "cy";
var end = document.cookie.indexOf( ';', len );
if ( end == -1 ) end = document.cookie.length;
iaith = unescape( document.cookie.substring( len, end ) );
return iaith;
}
function newidGolwg(){
iaith = darllenIaith();
var ieithoedd = new Array("cy", "en", "it");
for (var i=0; i<3; i++){
var el = document.getElementById(ieithoedd[i]);
if(ieithoedd[i] === iaith){
el.style.display = '';
} else {
el.style.display = 'none';
}
}
}
Mae'r cod mewn coch yn dangos y llinellau mae'n bosib y bydd angen newid arnoch. Mae'r rhai sy'n dangos '="cy"' yn cyfeirio at y iaith ddiofyn. Mae'r gyfres o ieithoedd yn cyfeirio at y rhai mae'ch gwefan yn cynnal. Mae'r darn "i < 3" yn cyfeirio at nifer y ieithoedd sydd yn gyfan gwbl (3 fan hyn).
Rhowch hyn yn y tag body:
<body onload="newidGolwg()">
Os ydych am ddolenni i newid yr iaith gallwch wneud hyn gyda bron unrhyw tag:
<p onclick = "newidIaith('cy');">Cymraeg</p>
<p onclick = "newidIaith('en');">English</p>
<p onclick = "newidIaith('it');">Italiano</p>
Gallwch osod y darnau iaith tu fewn DIVs arbennig. Pwysig: dim ond un tag mewn dogfen sydd yn gallu cael id penodol. Os ydych am gymysgu lan eich ieithoedd (ddim yn syniad da beth bynnag), bydd angen defnyddio CLASS yn lle ID a bydd yn rhaid defnyddio swyddogaeth cwstwm - dipyn o ben tost!
<div id = "cy" lang="cy"> (cynnwys Cymraeg yma) </div>
<div id = "en" lang="en-GB"> (cynnwys Saesneg yma) </div>
<div id = "it" lang="it"> (cynnwys Eidaleg yma) </div>
Er mwyn peidio ag ail-adrodd y cod javascript ym mhen pob dogfen, hynny yw tu fewn tagiau SCRIPT cyffredin. Arbedwch y cod mewn ffeil, e.e. iaith.js a'i gosod fel y canlynol tu fewn i tagiau HEAD pob dogfen:
<script src="iaith.js"></script>
Mae hwn yn gwneud yr holl beth yn haws i'w rheoli - e.e. os ydych am ychwanegu neu ddileu ieithoedd, dim ond un ffeil sydd angen newid (o ran y cod), er bydd dal angen newid y cynnwys ar bob tudalen.
Datrysiad cadw drychau neu ffolderi dyblyg
Os nac ydy pHp/MySQL ar gael, neu ni allwch ddefnyddio javascript yn eich cynlluniau, dim ond un peth sydd amdani - creu sawl gwefan - un am bob iaith. Yr awgrym yw, eich bod yn creu un tudalen hafan yn yr iaith ddiofyn (neu hafan sblash, sy'n gofyn am iaith cyn dechrau) ac yna storio copïau o'r un ffeiliau o dan ffolderi iaith, e.e.
** Mae cadw ffeiliau yn sync gallu bod yn ANODD. Mae hyn yn arbennig o wir os ydy un iaith yn gorfod cael ei ffermio allan pob tro bod angen newidiadau. **