2010-03-20 17 views
5

quindi ho molti utenti che pubblicano articoli con nomi in diverse lingue. Ho bisogno di un po 'di lib per tradurre i nomi degli articoli di thouse in lettere inglesi, ad esempio trasformare russo' р 'in eng' r 'e così via per tutte le lingue europee, le lingue russa e asiatica. Dove ottenere tale lib?Esiste un lib di translit gratuito PHP open source?

45 secondi di google mi hanno dato questo "This extension allows you to transliterate text in non-latin characters (such as Chinese, Cyrillic, Greek etc) to latin characters." Sembra essere quello di cui avevo davvero bisogno. Qualcuno ha provato questo nella vita reale?

+0

Perché vorresti farlo. Sicuramente il testo sarà privo di significato, o almeno meno significativo una volta fatto? – PurplePilot

+0

Domanda simile: http://stackoverflow.com/questions/1284535/php-transliteration – Gordon

+0

@PurplePilot "Con nomi in lingue diverse" ... Un IMO legittimo, anche se non sono sicuro che i risultati funzioneranno sempre - per quanto ne so, molte angolazioni di nomi russi sono scritte in modo diverso rispetto agli originali russi. –

risposta

3

Google ha un AJAX transliteration API che fa un buon lavoro su many major scripts.

Edit: Accidenti, appare su un'ulteriore ispezione che questo consente solo conversioni dal l'alfabeto latino. È un po 'sciocco che Google non abbia reso disponibile la funzionalità inversa, dato che lo stanno già utilizzando in Google Translate per fornire romani per cirillico, cinese, tailandese, hindi e altri, sebbene in particolare non siano abusive come l'ebraico e l'arabo.

Ulteriori modifica: Ho pensato a una possibile soluzione alternativa: rilevare la lingua e utilizzare una query AJAX per eseguirla tramite Google Traduttore utilizzando la stessa lingua di origine della lingua di destinazione, ad es. Chinese-to-Chinese. Firebug rivela che la traslitterazione viene emessa in un div il cui ID è translit. Le traslitterazioni sono in genere fortemente accentate, quindi è necessario convertirle. Questo non è assolutamente su cui fare affidamento (anche se Google in genere non apporta modifiche strutturali frequenti al loro HTML), ma è certamente una possibilità interessante.

+0

Ancora un grande +1 per indicarlo! –

+0

Grazie mille! –

+0

+1 e c'è un altro modo - c'è qualcosa che chiamano "romanizzazione" ed è una composizione di romani leggibili ed esilmente traducibili. – Rella

1

fare iconv fare?

Con questo modulo, è possibile trasformare una stringa rappresentata da un set di caratteri locale in quella rappresentata da un altro set di caratteri, che potrebbe essere il set di caratteri Unicode.

Da manuale di PHP:

$text = "This is the Euro symbol '€'."; 

echo 'Original : ', $text, PHP_EOL; 
echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL; 
echo 'IGNORE : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL; 
echo 'Plain : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL; 

Se così non va, prova anche questi

In alternativa, definire la mappa caratteri in un array e utilizzare str_replace o mb_substitute_character per eseguire la conversione.

+0

In effetti, iconv gira 'Москва' in' Moskva'? Wow se lo fa. Non posso provare adesso ... –

+0

@Pekka senza indizio. Non ho usato iconv troppo spesso, per non parlare dei set di caratteri russi, ma in fondo, sì, questo è quello che dovrebbe essere in grado di fare. – Gordon

+0

non sembra funzionare per me, semplicemente lascia cadere le lingue cirilliche. Penso che questo sia più complesso, vedi la mia risposta. –

2

Non sono un linguista, tutt'altro, ma vi presento la possibilità che ciò che state cercando di fare sia impossibile, oppure estremamente complesso da implementare.

Dopo tutto, la traduzione dei nomi è più di una semplice "conversione degli alfabeti". È relativamente facile in russo perché ogni personaggio cirillico ha effettivamente una controparte latina (sono sister alphabets).

Non so l'arabo, ma per il cinese è necessario un sistema di romanizzazione come Pinyin per arrivare ovunque. È più complesso di una semplice sostituzione di personaggi.

Ecco un elenco completo di ISO Romanizations - Se ho capito bene, una soluzione che funziona per te dovrebbe implementare quelle regole.

Quindi il compito sarebbe:

  • Analizzare un testo che contiene numerose carattere diverse categorie

  • Identificare ogni parola per la quale intervallo di caratteri a cui appartiene (อักษร ไทย è tailandese; Москва è cirillico; e così via)

  • Applicare il metodo corretto di romanizzazione ad ogni parola.

Ora sono molto interessato a conoscere tutte le librerie che possono farlo in PHP, ma è ben possibile che non ce ne siano.

+0

@Pekka Il modo in cui ho capito l'OP, se c'è Åå, vuole che sia Aa. Questo è ciò che fa iconv, * se * ha una mappatura. Trova il più vicino approssimativo, niente di più, niente di meno. Quindi o trasformerà Москва in Mockba o Moskva. Come ho detto, non ne sono sicuro (è per questo che ho posto la risposta come una domanda), ma anche se così non fosse, può ancora usare l'approccio di mappatura personalizzata o provare qualsiasi altra lib, come Recode o MB_ * – Gordon

+0

@Gordon Sono sicuro che questo può essere fatto funzionare per il russo. Ma lui vuole "tutte le lingue europee, le lingue russe e asiatiche", quest'ultima sarà * molto * dura. –

+0

@Gordon: il problema riguarda principalmente lingue come il cinese e il giapponese. Il giapponese è praticabile se hai il kana (i kanji possono essere letti in molti modi diversi, a seconda del contesto), ma per il cinese usano solo caratteri Hanzi.Per quanto ne so, il cinese non ha una pronuncia singola per ogni personaggio di Hanzi. C'è anche un problema per le lingue come l'ebraico e l'arabo, poiché i wovels non sono necessariamente presenti, ma impliciti. Puoi meccanicamente trasferire le cose che * sono * lì, ma il risultato potrebbe essere inutile. –

1

In PHP5.3, Intl introduce una classe di traslitteratore, che è un wrapper in ICU. La seguente libreria ha il pieno set di regole ISO:

http://www.php.net/manual/en/transliterator.transliterate.php

+0

Le funzioni di Transliterator sono incluse solo in PHP 5.4 e versioni successive. –

+0

@Koen: Penso che Symfony mantenga una versione compatibile con PHP 5.3. Vedi https://github.com/symfony/Icu e http://symfony.com/doc/current/components/intl.html –

0

ho finito per scrivere una libreria PHP basato sulla URLify.js del progetto Django, dal momento che ho trovato iconv() per essere troppo incompleta. Lo si può trovare qui:

https://github.com/jbroadway/urlify

gestisce caratteri latini, così come greco, turco, russo, ucraino, ceco, polacco e lettone.

Problemi correlati