21. august 2006 - 22:41Der er
72 kommentarer og 1 løsning
Sprog - nem tilgang?
Hej alle
Har nu siddet to aftener i træk og forsøgt at læse lidt omkring brugen af sprogskift i php.
Jeg skal til at lave en webside som skal køre med både dansk og engelsk sprogvalg.
Jeg forestiller mig at man kommer ind på Index.php der som standard er DANSK. Her læser man så f.eks nyhed.php?id=3 (viser nyhed nummer 3 som udtrækkes fra MySql)
Hvis man så vil læse denne nyhed på engelsk også klikker man på et lille ENGELSK flag og får herved samme side/Id bare hvor teksten er på engelsk.
Hvordan laves dette?
Som jeg tidligere skrev har jeg siddet og nærlæst mange gode indlæg her på EXP omkring netop dette, men uden at fatte ret meget af det. Er stadig ret nOob.
Mit problem er også at jeg gerne vil benytte Includes, hvorfor min danske menu samtidig skal skifte ved klik på førnævnte engelske flag, til ENGELSK.
Noget af løsningen kunne evt. være at der i min "opret nyhed" i admin er tre felter til den danske tabel og tre felter til engelske tabel.
Min tabel opsætning kunne evt. være: - DK tabel nyhed - Id, overskrift, tekst, billed
- UK tabel news - Id, topheader, text, pic
Min "opret nyhed" ville så være: tre felter til DK med en autoincrement på id og så de tre andre felter. På samme side vil der være yderlige tre felter til den engelske nyhed som skrives samtidig og dermed får samme ID increment, blot i UK tabel news.
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
Slettet bruger
22. august 2006 - 00:00#1
Hvis du alligevel har en større del tekst i databasen, vil jeg anbefale noget i denne stil:
tabel nyhed: id, billed
tabel nyhed_tekst: nyhed_id, sprogkode, overskrift, tekst
Og så også have en anden tabel med alle mulige forskellige tekster, der skal udskrives til navigation og den slags.
tabel sprog tekstkode, sprogkode, tekst
Du skal så bare have samme tekstkode for teksten på engelsk og dansk.
Bemærk at med denne metode, er det ikke nødvendigt med forskellig PHP-kode til at håndtere forskellige sprog, så det kræver ikke andet end en oversætter, hvis man skal tilføje et sprog mere.
Synes godt om
Slettet bruger
22. august 2006 - 00:01#2
Selve menuen bør nok laves som to tabeller lige som nyhed-tabellen.
Det kan godt gå hen og blive en rodet affære... En anden måde at gøre det på er at have én tabel til nyheder, som er i et default sprog, kald den news:
Hvis folk så er på default sproget, skal du ikke gøre andet end at hive nyheden med det pågældende ID ud. Er det et andet sprog, skal du selecte fra en anden tabel, news_lang, sådan: SELECT header, content picture FROM news_lang WHERE news_id = $id Dette synes jeg er den mest oplagte måde til dig... Man kunne sågar lade news tabellen indeholde ét auto_increment'et ID og intet andet, og blot fylde de rigtige data i news_lang med den rigtige language code...
Det andet med at sikre at ID'er er samme i alle tabeller, kan gå hen at blive lidt noget rod ;)
Ja, sandbox nåede en nærmest identisk løsning mens jeg skrev :) Billedet *kan* jo godt indeholde tekst, så det er nok en god idé at have en i news_lang - evt. kan man bare gøre så man kan "klone" det billede der er i defaultsproget :)
Fine svar men jeg er stadig nået lige langt i min færd imod en to-sproget side for jeg fatter intet af dette.
Jeg vil forsøge at forklare mine probs igen.
Mål: at opnå at lave en to-sproget version af en php-styret webside.
1) Brugeren kommer ind på min webside. Der finder han/hun en masse indhold, på dansk da dette er standart sprog. Foroven i menu delen findes to flag; et dansk og et engelsk. Ved klik på det engelske skiftes sproget på den aktuelle side til engelsk. Den aktuelle side er f.eks nyhed?id=3 eller andet.
2) I min admin del vil jeg gerne oprette en nyhed. Denne nyhedsoprettelse består af 6 felter. Tre til dansk indhold og tre til engelsk indhold. Den danske tilføjes til Mysql DB og laver et autoincrement på id. Det samme gør sig gældende for de tre andre, altså den engelske.
3) Når man klikker på det engelske flag mens man befinder sig på den danske nyhed?id=3 skiftes denne nyhed til samme nyhed, blot på engelsk. Kan dette lade sig gøre idet nyheden er tilføjet både på DK og UK i DB mysql? www.domæne.dk?sprog=uk?nyhed?id=3 ????
Jeg vil virkelig gerne have en meget DOWN to EARTH forklaring på alt ovenstående da jeg ikke forstår sammenhængen med dette sprogvalg.....????
4) Da jeg vil benytte SSI på min webside vil jeg gerne vide hvordan jeg får min menu til at ændre sig fra DK til UK idet jeg klikker på det engelske flag ??
$sql = "SELECT $header, $content, $picture FROM news WHERE newsid = " . intval( $_GET['id'] ); $qh = mysql_query( $sql ) or die( mysql_error() ); $row = mysql_fetch_assoc( $qh ); // Der tilføjes _uk til feltnavnene, hvis brugeren har valgt UK
Jeg er helt klar over hvordan jeg skal ECHO noget fra min US eller UK tabel. Problemet er at jeg stadig ikke kan få lavet det skift imelllem DK og UK via klik på flagene, da jeg satdig ikke forstår hvordan det skal gøres, i henhold til jeres beskrivelser.
Jeg vælger derfor at lukke dette spørgsmål og har oprettet et nyt som måske bedre forklarer min problemstilling. Men stadig vil jeg gerne i den gode ånd tildele er begge nogle point.
$sql = "SELECT $header, $content, $picture FROM news WHERE newsid = " . intval( $_GET['id'] ); $qh = mysql_query( $sql ) or die( mysql_error() ); $row = mysql_fetch_assoc( $qh ); // Der tilføjes _uk til feltnavnene, hvis brugeren har valgt UK
$sql = "SELECT $header, $content, $picture FROM news WHERE newsid = " . intval( $_GET['id'] ); $qh = mysql_query( $sql ) or die( mysql_error() ); $row = mysql_fetch_assoc( $qh ); // Der tilføjes _uk til feltnavnene, hvis brugeren har valgt UK
<div id="indhold"><?php //Tjek om variablen p er sat i adresselinien. Hvis ike bruger vi side. if ( isset( $_GET['id'] ) && !empty( $_GET['id'] ) ) $page = $_GET['id']; else $page = "hjem";
//Hvis der er en / i enden fjerner vi denne. if ( eregi("/$",$page) ) $page = substr($page,0,strlen($page)-1);
//sætter filnavnet til vores sti og .php $filename = "undersider/" . $page . ".php";
//Vi tjekker om filen eksisterer - hvis den gør includerer vi denne, ellers skriver vi at der ikke er nogen fil if ( file_exists($filename) ) include($filename); else echo "Problem med siden - siden findes ikke på serveren"; ?>
Koden her: "><?php //Tjek om variablen p er sat i adresselinien. Hvis ike bruger vi side. if ( isset( $_GET['id'] ) && !empty( $_GET['id'] ) ) $page = $_GET['id']; else $page = "hjem";
//Hvis der er en / i enden fjerner vi denne. if ( eregi("/$",$page) ) $page = substr($page,0,strlen($page)-1);
//sætter filnavnet til vores sti og .php $filename = "undersider/" . $page . ".php";
//Vi tjekker om filen eksisterer - hvis den gør includerer vi denne, ellers skriver vi at der ikke er nogen fil if ( file_exists($filename) ) include($filename); else echo "Problem med siden - siden findes ikke på serveren"; ?>
Vil via input fra menuen SWITCHE siderne ud med tekst og billede indhold. Alle disse sider ligger i mappen UNDERSIDER.
Er godt klar over at der ikke skrives noget DK/UK indhold ud nogle steder, da dette er den første side og dine forslag skal så bygges ind i dette.
Desuden skal jeg have min menu til at SKIFTE fra DK til UK. Menuen er statisk og skal simpelthen bare include en UK_menu istedet for DK_menu.
<div id="indhold"><?php //Tjek om variablen p er sat i adresselinien. Hvis ike bruger vi side. if ( isset( $_GET['id'] ) && !empty( $_GET['id'] ) ) $page = $_GET['id']; else $page = "hjem";
//Hvis der er en / i enden fjerner vi denne. if ( eregi("/$",$page) ) $page = substr($page,0,strlen($page)-1);
//sætter filnavnet til vores sti og .php $filename = "undersider/" . $page . ".php";
//Vi tjekker om filen eksisterer - hvis den gør includerer vi denne, ellers skriver vi at der ikke er nogen fil if ( file_exists($filename) ) include($filename); else echo "Problem med siden - siden findes ikke på serveren"; ?>
Dette er: ////NYHED.php//// <br /><h1>Nyheder</h1><br />
<?php require_once "forbinder.php";
$foresp = mysql_query("SELECT * FROM nyheder ORDER BY id DESC LIMIT 0, 10"); while($data = mysql_fetch_array($foresp)){
$id = $data['id']; $tekst = $data['tekst']; $tegn = strlen($tekst); // Hvor mange tegn er der i teksten?
if($tegn >= 0){ // hvis der er mere end 150 tegn skal teksten besk?res $tekst = substr($tekst, 0, 0)."<a href='index.php?id=nyhedread&vis=$id' class=\"link3\"><img src=\"subs/gfx/arrow.jpg\" alt=\"$data[overskrift]\" /> Læs mere </a>"; // Der tilf?jes et link til en side hvor hele nyheden vises
Min nyhed.php hives ind i min index.php fra en mappe der hedder "undersider" og bliver placeret i en DIV CONTAINER hvor førnævnte SWITCH ligger og styrer indhentning af siderne. Skiftet sker via menupunktet "?=nyhed"
Hvordan får jeg så min side til at: 1) skifte statisk menu fra DK_ til UK_menu 2) Vil dit indlæg her så resultere i at der skiftes til en fil der hedder "news.php" ved klik på UK flag? F.eks jeg står på http://simuu.dk/?id=nyhed&vis=14 og ved klik på UK flag skiftes der over til http://simuu.dk/?id=news&vis=14
$foresp = mysql_query("SELECT id, $header, $content FROM nyheder ORDER BY id DESC LIMIT 0, 10") or die( mysql_error() ); while($data = mysql_fetch_array($foresp)){
$id = $data['id']; $tekst = $data[$content]; $overskrift = $data[$header]; $tegn = strlen($tekst); // Hvor mange tegn er der i teksten?
if($tegn >= 0){ // hvis der er mere end 150 tegn skal teksten besk?res $tekst = substr($tekst, 0, 0)."<a href='index.php?id=nyhedread&vis=$id' class=\"link3\"><img src=\"subs/gfx/arrow.jpg\" alt=\"$overskrift\" /> Læs mere </a>"; // Der tilf?jes et link til en side hvor hele nyheden vises
Ok, for jeg havde nemlig forestillet mig at input i min MySql skulle både på DK og UK og at der så skulle switches imllem henholdsvis dk og uk men med samme ID.
Vil det sige at jg skal opbygge alle mine tabeller i MySql på denne måde:
Forside tabel indeholder f.eks. 7 felter: id, overskrift, billede, tekst, header (UK), picture (UK), texts (UK)
Og når ovenstående kommer i effekt sammen med dine koder vil der ved klik på UK flag skiftes fra DK sprog til UK sprog men indenfor samme ID?
Det samme vil ligeledes gøre sig gældende indenfor alle andre af min tabeller eller hvad?
Tilbage står stadig spørgsmålet med min statiske menu struktur. Kan de skiftes på samme tid eller hvad...jeg formoder der skal bygges en fnktion op til dette på en eller anden facon. Eks. så har jeg en mappe der hedder MENU. I den mappe ligger to HTML filer som skal inkluderes alt efter sprogvalg. Der ligger f.eks. en DK_menu.html som er default og så en UK_menu.htm som skal switche når der vælges et andet sprog.
chlang.php skal KUN bruges når der skiftes sprog... Den skal kun indeholde det jeg skrev 15/10-2006 14:01:02 - Du skifter sprog ved at linke som jeg beskriver i samme post :)
Mit problem er jo at alle mine undersider skal være tilgængelige på både Dansk og Engelsk, så derfor SKAL chlang.php vel ligge på index.php idet denne mulighed skal være tilgængeligt igennem hele sitet.
Har nu gjort følgende: På Index.php startet siden med <?php session_start(); ?> <html>......bla bla bla
</html>
På min side som henter tekst ind fra MySql har jeg gjort følgende:
Der inkluderer jeg chlang.php og så henter jeg fra MySql.
Når jeg så går ind på siden via linket ?id=2 skriver den:
Warning: Cannot modify header information - headers already sent by (output started at /data/cluster/free1go/m/e/www.mediegrafiker.1go.dk/index.php:15) in /data/cluster/free1go/m/e/www.mediegrafiker.1go.dk/chlang.php on line 4
Jeg gentager lige mig selv en gang til :) Du skal *ikke* include chlang.php nogen steder - Du kan på de sider hvor der skal kunne skiftes sprog indsætte:
Super super...det havde jeg ikke lige forstået første gang du skrev det....som sagt er jeg ikke helt stiv i det her endnu og undskylder min langsomme fattevne.
Jeg ser på dette nye tiltag imorgen og melder tilbage.
Hvis jeg smider en session_start på den side der includeres...vil jeg så ikke opnå at få en session fejl igen da siden jo includeres på Index.php hvor der i forvejen ligger en session_start ??
Du havde sat koden ind i index.php - Det skal som jeg har skrevet flere gange være chlang.php - Den fil skal kun indeholde de 8 linjer! Din KODE 2 ser fin nok ud, men hvor har du de to links:
Jo, det lyder fint - Det skal bare være det første der sker, intet output før session_start(); og du kan kun tilgå $_SESSION-variable når dette er gjort
Nu har jeg så smidt en SESSION_START ind som det allerførste på min index side. Nu sker der følgende:
Jeg klikker på et flag, enten DK eller UK og så hopper siden til en URL som ikke kan vises. Men klikker jeg så med musen på TILBAGE knappen i browseren er menuen skiftet fra DK til UK. Kan det ikke lade sig gøre at den bare hoper derover med det samme. Det er som om at den ikke modtager noget parameter den kan bruge.
Følgende er et dump far min MySql hvor det gælende er for tabellen "tester"
///// DUMP ////// -- Struktur-dump for tabellen `tester` --
CREATE TABLE `tester` ( `id` int(11) NOT NULL auto_increment, `overskrift` tinytext NOT NULL, `header` tinytext NOT NULL, `texten` text NOT NULL, `overskrift_uk` text NOT NULL, `header_uk` tinytext NOT NULL, `texten_uk` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
-- -- Data dump for tabellen `tester` --
INSERT INTO `tester` (`id`, `overskrift`, `header`, `texten`, `overskrift_uk`, `header_uk`, `texten_uk`) VALUES (1, 'Velkommen', 'Her er en header', 'Her er noget tekst på dansk, som gerne skal skifte til engelsk sprog når der klikkes på flaget i toppen af siden.', 'Welcome', 'Here is a header thingy', 'Here is some text in english, that should be changed when the US flag at the top is clicked.');
////// DUMP SLUT ///
Så der ligger altså indhold i min DB med tabellen "tester" men kan ikke forstå hvor det ikke bliver ECHO´et ud når jeg afvikler min SELECT som vist ovenfor på den 13/12-2006 21:44:06
Jep, du har ret at indlægget efterhånden er ved at være ret gammelt.
Men som jeg giver udtryk for virker det satdig ikke. Min kode i både php/mysql er som indlægget fra den 15/12-2006 22:22:44
Desværre får jeg ikke noget output endnu når jeg klikker ind på undersiderne trods det at der er indhold i mysql som du kan se udfra samme indlæg. Jeg aner ikke hvad der sker og mangler derfor stadig hjælp.
Min menu bliver ændret fint men indholdet som skulle kaldes fra mysql bliver ikke echo´et ud.
Det hænger jo heller ikke sammen. index.php bruger "id" til at bestemme hvilken underside der includes, og "id" bruges OGSÅ i siderne til at hente en record ud fra mysql. Den record du har i databasen har ID 1 og ID 1 i index.php er start.php? Det er klart at hvis du trykker på page 1 eller page 2 (med ID 2 og 3) at der ikke kommer noget ud, da der kun er ÉN række i databasen (med ID 1).
Du kan evt. prøve at fyre dem af mod databasen:
INSERT INTO `tester` (`id`, `overskrift`, `header`, `texten`, `overskrift_uk`, `header_uk`, `texten_uk`) VALUES (2, 'Velkommen', 'Her er en header', 'Her er noget tekst på dansk, som gerne skal skifte til engelsk sprog når der klikkes på flaget i toppen af siden.', 'Welcome', 'Here is a header thingy', 'Here is some text in english, that should be changed when the US flag at the top is clicked.'); INSERT INTO `tester` (`id`, `overskrift`, `header`, `texten`, `overskrift_uk`, `header_uk`, `texten_uk`) VALUES (3, 'Velkommen', 'Her er en header', 'Her er noget tekst på dansk, som gerne skal skifte til engelsk sprog når der klikkes på flaget i toppen af siden.', 'Welcome', 'Here is a header thingy', 'Here is some text in english, that should be changed when the US flag at the top is clicked.');
Linket er stadig som før. Den opfører sig lidt underligt stadigvæk, men den printer dog noget ud. Det kan være du har en anden god idé til det problem du tidligere belyser.
Min nuværende SQL dump: ////////////////////////////////// CREATE TABLE `tester` ( `id` int(11) NOT NULL auto_increment, `overskrift` tinytext NOT NULL, `header` tinytext NOT NULL, `texten` text NOT NULL, `overskrift_uk` text NOT NULL, `header_uk` tinytext NOT NULL, `texten_uk` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
-- -- Data dump for tabellen `tester` --
INSERT INTO `tester` (`id`, `overskrift`, `header`, `texten`, `overskrift_uk`, `header_uk`, `texten_uk`) VALUES (1, 'Velkommen', 'Her er en header', 'Her er noget tekst på dansk, som gerne skal skifte til engelsk sprog når der klikkes på flaget i toppen af siden.', 'Welcome', 'Here is a header thingy', 'Here is some text in english, that should be changed when the US flag at the top is clicked.'),
(2, 'Velkommen (id 2)', 'Her er en header', 'Her er noget tekst på dansk, som gerne skal skifte til engelsk sprog når der klikkes på flaget i toppen af siden.', 'Welcome (id 2)', 'Here is a header thingy', 'Here is some text in english, that should be changed when the US flag at the top is clicked.'),
(3, 'Velkommen', 'Her er en header', 'Her er noget tekst på dansk, som gerne skal skifte til engelsk sprog når der klikkes på flaget i toppen af siden.', 'Welcome', 'Here is a header thingy', 'Here is some text in english, that should be changed when the US flag at the top is clicked.');
chlang.php burde redirecte til den side den kom fra, da linket bliver "bygget" med $_SERVER['REQUEST_URI'] - Hvordan ser den kode ud, hvor linkene til chlang.php er?
Jvf. ovenstående betyder det så summasumarum at jeg ikke kan benytte dette alligevel da jeg kun kan vise et id pr. side?
Er det sådan jeg skal opfatte det?
Det er sgu da trist at vi har brugt så meget tid på det for så at finde ud af i 11. time at det rent faktisk ikke kan bruges da jeg jo visse steder ønsker at have flere id´s (f.eks en nyhedsliste-visning)
Nej. Nyhedslistevisning er jo en liste. ID'en er til hvis du skal vise én specifik. I URL'en på listevisningen har du jo heller ikke alle ID'erne oppe i URL'en.
Faldt lige over denne sprogting som jeg oprettede sidste år og så at jeg stadig ikke havde accepteret dit svar.
Det har jeg nu gjort, da det virker efter hensigten.
Tusinde tak for din tålmodighed med mig og jeg undskylder meget at jeg er lidt fat-svag men jeg er meget taknemmelig for den hjælp du har givet mig her.
//Carsten aka Sabumnim
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.