2010-03-20 40 views
5

vì vậy tôi có rất nhiều người dùng đăng bài viết với tên bằng các ngôn ngữ khác nhau. Tôi cần một số lib để dịch tên bài viết thouse để chữ cái tiếng Anh ví dụ biến Nga 'р' vào eng 'r' và như vậy cho tất cả các ngôn ngữ châu Âu, Nga và châu Á ngôn ngữ. Nơi để có được lib như vậy?Có bất kỳ mã nguồn mở miễn phí PHP nào không?

45 giây của google đã cho tôi điều này "This extension allows you to transliterate text in non-latin characters (such as Chinese, Cyrillic, Greek etc) to latin characters." Có vẻ như đó là những gì tôi thực sự cần. Có ai thử điều này trong đời thực không?

+0

Tại sao bạn muốn thực hiện điều đó. Chắc chắn văn bản sẽ vô nghĩa, hoặc ít nhất là ít có ý nghĩa một khi đã xong? – PurplePilot

+0

Câu hỏi tương tự: http://stackoverflow.com/questions/1284535/php-transliteration – Gordon

+0

@PurplePilot "Với tên bằng các ngôn ngữ khác nhau" ... IMO hợp pháp sử dụng, mặc dù tôi không chắc liệu kết quả sẽ luôn hoạt động - theo như tôi biết, nhiều sự thay đổi về tên tiếng Nga được viết khác với những bản gốc tiếng Nga. –

Trả lời

3

Google có một số AJAX transliteration API, thực hiện công việc tốt trên many major scripts.

Chỉnh sửa: Thiệt hại, nó xuất hiện để kiểm tra thêm rằng điều này chỉ cho phép chuyển đổi từ bảng chữ cái Latinh. Thật ngớ ngẩn khi Google không cung cấp chức năng đảo ngược, vì họ đã sử dụng chức năng này trong Google Translate để cung cấp các ngôn ngữ tiếng Kirin, tiếng Trung, tiếng Thái, tiếng Hindi và tiếng khác, mặc dù không phải là abugidas như tiếng Do Thái và tiếng Ả Rập.

Chỉnh sửa thêm: Tôi đã nghĩ về giải pháp khả thi: phát hiện ngôn ngữ và sử dụng truy vấn AJAX để chạy qua Google Dịch bằng cùng ngôn ngữ nguồn như ngôn ngữ đích, ví dụ: Chinese-to-Chinese. Firebug cho thấy rằng phiên âm là đầu ra trong số div có ID là translit. Các chuyển ngữ thường có dấu trọng âm, vì vậy bạn cần phải chuyển đổi chúng. Điều này là do không có nghĩa là một cái gì đó để dựa vào (mặc dù Google thường không thực hiện thay đổi cấu trúc thường xuyên cho HTML của họ), nhưng nó chắc chắn là một khả năng thú vị.

+0

Vẫn là +1 lớn để chỉ ra điều này! –

+0

Cảm ơn bạn rất nhiều! –

+0

+1 và có 1 cách khác - có cái gì đó họ gọi là "La Mã hóa" và nó là thành phần của những người cho phép La Mã có thể đọc được và có thể dịch được. – Rella

1

Sẽ iconv làm gì?

Với mô-đun này, bạn có thể biến chuỗi được đại diện bởi một bộ ký tự cục bộ thành bộ được đại diện bởi một bộ ký tự khác, có thể là bộ ký tự Unicode.

Từ PHP dẫn sử dụng:

$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; 

Nếu điều đó sẽ không làm, hãy kiểm tra các

Là một thay thế, xác định các đồ vật trong một mảng và sử dụng str_replace hoặc mb_substitute_character để thực hiện chuyển đổi.

+0

Iconv có thực sự biến 'Москва' thành' Moskva' không? Wow nếu có. Không thể thử ngay bây giờ ... –

+0

@Pekka không có đầu mối. Tôi đã không sử dụng iconv quá thường xuyên, hãy để một mình với bộ ký tự Nga, nhưng về cơ bản, có, đây là những gì nó sẽ có thể làm. – Gordon

+0

dường như không hoạt động đối với tôi, nó chỉ làm giảm các ngôn ngữ cyrillic. Tôi nghĩ điều này phức tạp hơn, xem câu trả lời của tôi. –

2

Tôi không phải là nhà ngôn ngữ học, cách xa nó, nhưng tôi gửi cho bạn khả năng những gì bạn đang cố gắng làm là không thể, hoặc cực kỳ phức tạp để triển khai.

Sau khi tất cả, tên dịch không chỉ là "chuyển đổi bảng chữ cái". Nó là tương đối dễ dàng bằng tiếng Nga bởi vì mỗi nhân vật cyrillic thực sự có một đối tác latin (họ là sister alphabets).

Tôi không biết về tiếng ả rập, nhưng đối với tiếng Trung, bạn sẽ cần một hệ thống tiếng La-tinh như Pinyin để đến bất kỳ đâu. Nó phức tạp hơn một sự thay thế đơn giản của các nhân vật.

Đây là danh sách đầy đủ của ISO Romanizations - Nếu tôi hiểu chính xác, giải pháp phù hợp với bạn sẽ phải triển khai các quy tắc đó.

Vì vậy, nhiệm vụ sẽ là:

  • Phân tích một văn bản có chứa rất nhiều nhân vật khác nhau dao động

  • Xác định từng chữ mà nhiều nhân vật nó thuộc về (อักษร ไทย là Thái; Москва là Cyrillic; và như vậy)

  • Áp dụng phương pháp đúng ngữ pháp hóa cho mỗi từ.

Bây giờ tôi rất muốn nghe về bất kỳ thư viện nào có thể làm điều này trong PHP, nhưng cũng có khả năng là không có.

+0

@Pekka Cách tôi hiểu OP, nếu có, anh ấy muốn nó là Aa. Đó là những gì iconv làm, * nếu * nó có một ánh xạ. Nó tìm thấy gần đúng nhất, không có gì nhiều hơn, không có gì ít hơn. Vì vậy, hoặc là nó sẽ biến Москва thành Mockba hoặc Moskva. Như tôi đã nói, tôi không chắc chắn (đó là lý do tại sao tôi đặt ra câu trả lời là câu hỏi), nhưng ngay cả khi anh ta vẫn không thể sử dụng phương pháp lập bản đồ tùy chỉnh hoặc thử bất kỳ libs nào khác, như Recode hoặc MB_ * – Gordon

+0

@Gordon Tôi chắc chắn rằng điều này có thể được thực hiện công việc cho Nga. Nhưng anh ta muốn 'tất cả các ngôn ngữ châu Âu, ngôn ngữ Nga và châu Á' sau này sẽ rất * rất khó khăn. –

+0

@Gordon: Vấn đề chủ yếu là với các ngôn ngữ như tiếng Trung và tiếng Nhật. Tiếng Nhật là hoàn toàn khả thi nếu bạn có kana (kanji có thể được đọc theo nhiều cách khác nhau, tùy theo ngữ cảnh), nhưng đối với tiếng Trung, họ chỉ sử dụng ký tự Hanzi.Theo hiểu biết tốt nhất của tôi, Trung Quốc không có cách phát âm duy nhất cho mỗi nhân vật Hanzi. Ngoài ra còn có một vấn đề cho các ngôn ngữ như tiếng Do Thái và tiếng Ả Rập, vì wovels không nhất thiết phải hiện diện, nhưng ngụ ý. Bạn có thể chuyển đổi thành công thứ mà * là * ở đó, nhưng kết quả cũng có thể là vô dụng. –

1

Trong PHP5.3, Intl giới thiệu một lớp phiên âm, là một trình bao bọc xung quanh ICU. Các thư viện sau đây có đầy đủ tiêu chuẩn ISO quy tắc thiết lập:

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

+0

Các chức năng Transliterator chỉ được bao gồm trong PHP 5.4 trở lên. –

+0

@Koen: Tôi nghĩ Symfony duy trì phiên bản tương thích với PHP 5.3. Xem https://github.com/symfony/Icu và http://symfony.com/doc/current/components/intl.html –

0

tôi đã kết thúc viết một thư viện PHP dựa trên URLify.js từ dự án Django, kể từ khi tôi tìm thấy iconv() là quá đầy đủ. Bạn có thể tìm thấy nó ở đây:

https://github.com/jbroadway/urlify

Xử lý các ký tự Latinh cũng như Hy Lạp, Thổ Nhĩ Kỳ, Nga, Ucraina, Séc, Ba Lan và Latvia.

Các vấn đề liên quan