[PHP] Turkse tekens in language files

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Barracuda_82
  • Registratie: September 2001
  • Laatst online: 19-12-2024

Barracuda_82

mkTime(), not war!

Topicstarter
Ik ben op het moment bezig met een website die in het turks en het nederlands (en later ook andere talen) getoond moet worden.

Nu maak ik gebruik van zelfgemaakte language files die er ongeveer zo uit zien (even als quote, want als code worden de turkse tekens geconvert):
define( "_EDITDETAILS", utf8_encode("Bilgilerimi değiştir") );
define( "_ADDOFFER", utf8_encode("Promosyon ekle") );
define( "_MYBARTERS", utf8_encode("Kendi barter işlemlerime git") );
define( "_SHOWFAVORITES", utf8_encode("Tercihlere git") );
De site waar de lanuage file in gebruikt wordt is als UTF8 gecodeerd en alle teksten worden in de language file ook als UTF8 gecodeerd. Nu blijkt dat er 6 tekens zijn die niet in de UTF8 charset zitten en dus niet getoond worden.

code:
1
2
3
4
5
6
Ğ     Ğ  Uppercase "G" with breve accent
İ     İ  Uppercase dotted "I"
Ş     Ş  Uppercase "S" with cedilla
ğ     ğ  Lowercase "g" with breve accent
ı     ı  Lowercase dotless "i"
ş     ş  Lowercase "s" with cedilla


Als ik handmatig de tekens vervang in mijn language file worden ze goed weergegeven, maar aangezien de language file gruwelijk groot is (word) is dat niet echt een goede oplossing.

Nu heb ik geprobeerd om de soeciale tekens te replacen in mijn template class, net voordat de pagina gereturned word:
str_replace('Ş','Ş',$content);
Maar blijkbaar replaced ie hiermee alle turkse tekens die hij niet kent (die 6 hierboven) met die HTML code. Geen oplossing dus.

De hele site omzetten in ISO 8859-9 (die de tekens wel bevat) is geen optie, dus ik moet een manier zien te verzinnen om de tekens in de language file te replacen met de bijbehorende HTML codes. Iemand enig idee hoe ik dit op kan lossen? Ik weet het niet meer...

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Ş bestaat wel? (oa)
En dus klopt je conversie wellicht niet...

{signature}


Acties:
  • 0 Henk 'm!

  • MrOizo2005
  • Registratie: September 2003
  • Laatst online: 20-09 18:42
Probeer eens zoiets als dit?
$patterns[0] = '/Ş/';
$replacements[0] = 's';

$string = preg_replace($patterns, $replacements, $string);
kan het hier alleen niet testen

[ Voor 7% gewijzigd door MrOizo2005 op 01-07-2008 11:10 . Reden: Moet het in Quote zetten anders word het replaced ]

Also known as Oizopower | When Life Gives You Questions, Google has Answers


Acties:
  • 0 Henk 'm!

  • Icelus
  • Registratie: Januari 2004
  • Niet online
Barracuda_82 schreef op dinsdag 01 juli 2008 @ 10:59:
Nu maak ik gebruik van zelfgemaakte language files die er ongeveer zo uit zien (even als quote, want als code worden de turkse tekens geconvert):

[...]

De site waar de lanuage file in gebruikt wordt is als UTF8 gecodeerd en alle teksten worden in de language file ook als UTF8 gecodeerd. Nu blijkt dat er 6 tekens zijn die niet in de UTF8 charset zitten en dus niet getoond worden.
UTF-8 is gecodeerde Unicode, alle karakters zijn hiermee te coderen.

Het PHP-bestand met alle teksten is als UTF-8 opgeslagen? Zo ja, waarom gebruik je dan utf8_encode om de teksten te coderen?

Developer Accused Of Unreadable Code Refuses To Comment


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Als je toch met UTF 8 gaat werken (en dat is een heel goed idee :) ), moet je geen diakrieten etc weg willen gooien. Die conversie klopt gewoon niet, wellicht omdat het al in het php bestand al fout gaat. TS doet utf8_encode, maar in wat is daar dan de source encoding? Etc.

{signature}


Acties:
  • 0 Henk 'm!

  • Barracuda_82
  • Registratie: September 2001
  • Laatst online: 19-12-2024

Barracuda_82

mkTime(), not war!

Topicstarter
MrOizo2005 schreef op dinsdag 01 juli 2008 @ 11:09:
Probeer eens zoiets als dit?
[...]
kan het hier alleen niet testen
Krijg ik dit:
Warning: preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 0 in /var/www/****/htdocs/www/tekentest.php on line 48
@voutloos: bij mij wil ie dat teken echt neit weergeven.. :?

Acties:
  • 0 Henk 'm!

  • Barracuda_82
  • Registratie: September 2001
  • Laatst online: 19-12-2024

Barracuda_82

mkTime(), not war!

Topicstarter
Voutloos schreef op dinsdag 01 juli 2008 @ 11:21:
Als je toch met UTF 8 gaat werken (en dat is een heel goed idee :) ), moet je geen diakrieten etc weg willen gooien. Die conversie klopt gewoon niet, wellicht omdat het al in het php bestand al fout gaat. TS doet utf8_encode, maar in wat is daar dan de source encoding? Etc.
Call me a n00b, maar bij het woord diakrieten was je me al kwijt... Wil je je post nog even opnieuw uileggen in lekentaal? :)

Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 14:39

Johnny

ondergewaardeerde internetguru

Barracuda_82 schreef op dinsdag 01 juli 2008 @ 11:23:
[...]


Call me a n00b, maar bij het woord diakrieten was je me al kwijt... Wil je je post nog even opnieuw uileggen in lekentaal? :)
Je moet geen utf8_encode() gebruiken maar gewoon het bestand waar de vertalingen in staan als UTF-8 opslaan.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Diakriet is een woord dat je als je met char. encodings bezig bent wel mag kennen, dus google het maar.

Een analogie voor het laatste deel vd post (en want Icelus ook zegt) : Je zegt encode in utf-8, maar dat slaat nergens op als je (nog) niet eens begrijpt in welke encodig je huidige string is. Je bent nu domweg via trial-and-error aan het devven en dat is iets dat teveel mensen tevaak doen zodra er 'iets met met speciale tekens' moet gebeuren.

{signature}


Acties:
  • 0 Henk 'm!

  • Barracuda_82
  • Registratie: September 2001
  • Laatst online: 19-12-2024

Barracuda_82

mkTime(), not war!

Topicstarter
Johnny schreef op dinsdag 01 juli 2008 @ 11:31:
[...]

Je moet geen utf8_encode() gebruiken maar gewoon het bestand waar de vertalingen in staan als UTF-8 opslaan.
Oke, en hoe doe ik dat?

(vervelend als je na een paar jaar ervaring nog met dingen geconfronteerd word die je niet kent, voel me nu echt een n00b).

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Zoek het in je editor. In die 3 minuten heb je dat echt nog niet gedaan en een beetje initiatief mag wel. ;)

{signature}


Acties:
  • 0 Henk 'm!

  • Barracuda_82
  • Registratie: September 2001
  • Laatst online: 19-12-2024

Barracuda_82

mkTime(), not war!

Topicstarter
Voutloos schreef op dinsdag 01 juli 2008 @ 11:33:
Diakriet is een woord dat je als je met char. encodings bezig bent wel mag kennen, dus google het maar.

Een analogie voor het laatste deel vd post (en want Icelus ook zegt) : Je zegt encode in utf-8, maar dat slaat nergens op als je (nog) niet eens begrijpt in welke encodig je huidige string is. Je bent nu domweg via trial-and-error aan het devven en dat is iets dat teveel mensen tevaak doen zodra er 'iets met met speciale tekens' moet gebeuren.
Ik heb tot nu toe nog niet echt met speciale tekens hoeven werken en me er dus ook helemaal niet in verdiept. De meeste problemen die ik tot nu toe met speciale tekens had kon ik oplossen door ergens UTF8_encode oid op te doen. Ik ben me de afgelopen uren ook al aan het verdiepen in character encoding, maar moet zeggen dat het een taai materie is...

Acties:
  • 0 Henk 'm!

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Lees dit stukje op Joel on Software even. Encodings zijn niet moeilijk, maar je moet je /wel/ even beseffen dat een 'string' (nl: een array van bytes) geen betekenis heeft zonder encoding. Dat je met PHP werkt maakt het trouwens ook niet makkelijker, want daar is de support helemaal ver te zoeken (PHP heeft alleen strings in de zin van array-van-bytes, niet in de zin van 'tekst')

Acties:
  • 0 Henk 'm!

  • Barracuda_82
  • Registratie: September 2001
  • Laatst online: 19-12-2024

Barracuda_82

mkTime(), not war!

Topicstarter
Ik heb inmiddels ontdekt dat in het geval van mijn language files het voldoende is om de file te saven als UTF-8 (nooit geweten dat dit kon, ook nooit nodig gehad). Voor het archief: File -> Save As -> Encoding op UTF-8 zetten in Zend Studio.

Nu ga ik even de database controleren die al vol staat met content, hoe het daar mee gaat. Ik heb dit project overgenomen van een collega, dus hoop dat die de boel goed ingesteld heeft.

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
De database moet je zowiezo voordat je beginnen op utf8 encoding zetten, als die nu nog op standaard latin1_swedish_ci staat dan wordt het niet makkelijk alles in utf8 te zetten.
Pagina: 1