
Index: modules/system/system.js
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.js,v
retrieving revision 1.37
diff -u -p -r1.37 system.js
--- modules/system/system.js	16 Oct 2009 19:20:34 -0000	1.37
+++ modules/system/system.js	30 Nov 2009 08:42:59 -0000
@@ -180,12 +180,12 @@ Drupal.behaviors.machineReadableValue = 
       // Do not process the element if we got an error or the given name and the
       // machine readable name are identical or the machine readable name is
       // empty.
-      if (!$(target).hasClass('error') && ($(target).val() == $(source).val().toLowerCase().replace(searchPattern, settings.replaceToken) || $(target).val() == '')) {
+      if (!$(target).hasClass('error') && ($(target).val() == $(source).val().toLowerCase().transliterate().replace(searchPattern, settings.replaceToken) || $(target).val() == '')) {
         // Hide wrapper element.
         $(wrapper).hide();
         // Bind keyup event to source element.
         $(source).keyup(function () {
-          var machine = $(this).val().toLowerCase().replace(searchPattern, settings.replaceToken);
+          var machine = $(this).val().toLowerCase().transliterate().replace(searchPattern, settings.replaceToken);
           if (machine != '_' && machine != '') {
             // Set machine readable name to the user entered value.
             $(target).val(machine);
@@ -212,3 +212,51 @@ Drupal.behaviors.machineReadableValue = 
 
 })(jQuery);
 
+String.prototype.transliterate = function() { 
+	var dict = {
+		dictOriginal:  ['а', 'б', 'в', 'г', 'д', 'е',
+                        'ё', 'ж', 'з', 'и', 'й', 'к',
+                        'л', 'м', 'н', 'о', 'п', 'р',
+                        'с', 'т', 'у', 'ф', 'х', 'ц',
+                        'ч', 'ш', 'щ', 'ъ', 'ы', 'ь',
+                        'э', 'ю', 'я',
+                        'і', 'є', 'ї', 'ґ'
+                        ],
+        dictTranslate: ['a', 'b', 'v', 'g', 'd', 'e',
+                        'e', 'zh','z', 'i', 'j', 'k',
+                        'l', 'm', 'n', 'o', 'p', 'r',
+                        's', 't', 'u', 'f', 'h', 'ts',
+                        'ch','sh','sch', '', 'y', '',
+                        'e', 'ju', 'ja',
+                        'i', 'je', 'ji', 'g'
+                        ]
+	}
+	var result = '';
+	var charIsLowerCase, oChar, trChar, index;
+	
+	for (var i = 0; i < this.length; i++) {
+		oChar = this.charAt(i);
+		charIsLowerCase = true
+		if (oChar.toLowerCase() != oChar) {
+    		charIsLowerCase = false;
+    	}
+		
+		oChar = oChar.toLowerCase();
+		
+		index = dict.dictOriginal.indexOf(oChar);
+    	if (index == -1) {
+    		trChar = oChar;
+    	} else {
+    		trChar = dict.dictTranslate[index];
+    	}
+		
+		if (!charIsLowerCase) {
+			trChar = trChar.toUpperCase();
+		}
+		
+		result += trChar;
+	}
+	
+	return result; 
+}
+
