2010-01-24 22 views
3

在Ruby on Rails中,您可以輕鬆地將「任何」文本轉換爲適用於子域名/路徑名稱的格式。如何在Javascript中參數化/音譯?

1) "I am nobody." -> "i-am-nobody" 
2) "Grünkohl is a german word." -> "grunkohl-is-a-german-word" 

我想在客戶端做到這一點高響應性(替代方案將通過Ajax)。

最後一個例子被稱爲transliteration(將Umlauts和其他非拉丁字母轉換爲拉丁字母)。音譯將是一個很好的功能(在這種情況下,我可以回退到Ajax讓Iconv做到這一點)。

任何人都知道如何用JavaScript做到這一點?我目前的代碼工作正常,但有多個空格的問題,Tête-à-tête變成Tte--tte這只是醜陋的。

+0

出於好奇,這是如何與高響應?通常這是在服務器上完成一次 - 創建記錄時。 – 2010-01-24 17:48:59

+0

嗯,它的意思是用戶仍然可以改變的「建議」名稱。因此,當用戶填寫時,應填寫第二個。 – 2010-01-24 21:55:27

回答

0

下面是一個JS,用於將URL傳遞給俄語轉換爲英語。可以修改其數據以申請法語或任何其他語言。除了字母和數字之外的任何內容都被替換爲「 - 」,雙重和結尾「 - 」被刪除。

function url(word, letterVersionOrder) { 
     var letters = 'a b v g d e ["zh","j"] z i y k l m n o p r s t u f h c ch sh ["shh","shch"] ~ y ~ e yu ya ~ ["jo","e"]'.split(' '); 
     var wordSeparator = ''; 
     word = word.toLowerCase(); 
     for (var i = 0; i < word.length; ++i) { 
      var charCode = word.charCodeAt(i); 
      var chars = (charCode >= 1072 ? letters[charCode - 1072] : word[i]); 
      if (chars.length < 3) { 
       wordSeparator += chars; 
      } else { 
       wordSeparator += eval(chars)[letterVersionOrder]; 
      } 
     } 
     return(wordSeparator. 
       replace(/[^a-zA-Z0-9\-]/g, '-'). 
       replace(/[-]{2,}/gim, '-'). 
       replace(/^\-+/g, ''). 
       replace(/\-+$/g, '')); 
    } 

這裏是一個更快的精縮版:從here採納

function url(w, v) { var tr = 'a b v g d e ["zh","j"] z i y k l m n o p r s t u f h c ch sh ["shh","shch"] ~ y ~ e yu ya ~ ["jo","e"]'.split(' '); var ww = ''; w = w.toLowerCase(); for (var i = 0; i < w.length; ++i) { var cc = w.charCodeAt(i); var ch = (cc >= 1072 ? tr[cc - 1072] : w[i]); if (ch.length < 3) {ww += ch;} else {ww += eval(ch)[v];} } return(ww.replace(/[^a-zA-Z0-9\-]/g, '-').replace(/[-]{2,}/gim, '-').replace(/^\-+/g, '').replace(/\-+$/g, ''));} 

+0

對於某些多語言網址,您可能需要將您的網址重新拼音。這是不可能的,因爲正向音譯會丟失一些信息(例如,將33個俄文字母翻譯成26個英文字母)。對於動態打開的頁面來說,這可能也很耗時。解決方案是預先音譯每個URL元素,並將其作爲該物質的字段存儲在數據庫中。所以當你改變實體名稱並將結果保存到url_name字段時,你可以進行音譯。 – Zon 2014-08-27 12:27:07

相關問題