Преобразование строки в заглавный регистр с учетом турецкого алфавита в JavaScript
Вопрос о преобразовании строки в заглавный регистр, учитывая особенности турецкого алфавита, является актуальным для разработчиков, работающих с многоязычными интерфейсами. В JavaScript есть встроенные методы для работы с регистром, но они не всегда корректно обрабатывают символы, отличные от латинских.
Проблема
Пользователь столкнулся с проблемой преобразования строки в заглавный регистр (Title Case), который подразумевает преобразование начальной буквы каждого слова в заглавную, а остальных букв - в строчные. Однако в случае с турецким алфавитом, который включает в себя символы типа "ş", "ğ", "ç", "ı", "ü", "ö" и их заглавные аналоги, стандартные методы JavaScript не дают корректного результата.
Решение
Для решения проблемы можно использовать следующий подход:
Создать функцию toLocaleProperCase2, которая будет учитывать особенности турецкого алфавита.
Добавить в прототип String методы для преобразования в заглавный, строчный регистр и в регистр Title Case, учитывая локаль.
(function(){
// Объект с информацией о локали
var localeInfos = {
"tr-TR": {
lower: { i:"İ", ı:"I", ş:"Ş", ğ:"Ğ", ü:"Ü", ç:"Ç", ö:"Ö" },
upper: { İ:"i", I:"ı", Ş:"ş", Ğ:"ğ", Ü:"ü", Ç:"ç", Ö:"ö" }
}
};
// Регулярное выражение для разделения строки
var mask = "\\s:-", // Можно добавить дополнительные символы разделения
rg = new RegExp("([^"+mask+"])([^"+mask+"]*)","g");
// Функции для локальных преобразований
var fnToLocaleLower = function(s){ return localeInfos.tr_TR.upper[s]; },
fnToLocaleUpper = function(s){ return localeInfos.tr_TR.lower[s]; },
fnToProper = function($0,$1,$2){
if(localeInfos.tr_TR.lower.hasOwnProperty($1))$1 = localeInfos.tr_TR.lower[$1];
$2 = $2.replace(localeInfos.tr_TR.upperSearchRegExp,fnToLocaleLower);
return $1.toUpperCase() + $2.toLowerCase();
};
// Инициализация регулярных выражений для поиска
for(var i in localeInfos){
var localeInfo = localeInfos[i];
localeInfo.lowerSearchRegExp = new RegExp("["+Object.keys(localeInfo.lower).join("")+"]","g");
localeInfo.upperSearchRegExp = new RegExp("["+Object.keys(localeInfo.upper).join("")+"]","g");
}
// Расширение прототипа String
String.prototype.toLocaleProperCase2 = function(locale){
var localeInfo = localeInfos[locale.toLowerCase()];
return this.replace(rg,fnToProper);
};
String.prototype.toLocaleLowerCase2 = function(locale){
var localeInfo = localeInfos[locale.toLowerCase()];
return this.replace(localeInfo.upperSearchRegExp,fnToLocaleLower).toLowerCase();
};
String.prototype.toLocaleUpperCase2 = function(locale){
var localeInfo = localeInfos[locale.toLowerCase()];
return this.replace(localeInfo.lowerSearchRegExp,fnToLocaleUpper).toUpperCase();
};
})();
Примеры использования
var str = "şeker çOBAN ırMAk inTEad oF ÇOBAN İRMAK Hello-WORLD";
console.log(str.toLocaleProperCase2("tr-TR")); // Выведет: Şeker Çoban Irmak Intead Of Çoban İrmak Hello-World
Заключение
Использование предложенного решения позволит корректно преобразовывать строки в заглавный регистр, учитывая особенности турецкого алфавита и символы разделения. Это особенно важно для многоязычных веб-приложений, где требуется единообразие отображения текстовых данных.
Вопрос касается преобразования строки в заглавный регистр с учётом особенностей турецкого алфавита при помощи JavaScript.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.