Неправильный URL в азербайджанском языке

InstantCMS 2.X
#1 13 мая 2023 в 14:08

Здравствуйте.

Запускаю сайт на азербайджанском языке и столкнулся с одной проблемой.

При создании контента на азербайджанском языке, ввожу тайтл, например, məktəb должен правильно перевести URL как site.com/mekteb-html, а переводит как site.com/m-kt-b-html, т.е. буквы азербайджанского языка (ə,ü,ş,ç и т.д.) вместо того, чтобы переводить, ставит знак "-".

Незнаю в правильном ли я направлении, отредактировал файл functions.php, но всеравно не помогло.

Выкладываю ниже сам отредактированный файл и скриншот.

Изображение

Прикрепленный файл
functions.zip 3 Кб
#2 13 мая 2023 в 15:59

Локаль попробуйте поменять в

  1. function lang_setlocale() {
  2.  
  3. $locale = 'ru_RU.UTF-8';

на что-то типа az_Latn_AZ.UTF-8, если используете азербайджанскую латиницу

Добавлено спустя 9 минут

Ну и эту константу 

  1. define('LC_LANGUAGE_TERRITORY', 'ru_RU');

подправьте по аналогии

#3 13 мая 2023 в 16:34

В файле \system\languages\ВАШ_ЯЗЫК\functions.php

Есть массив

  1. $ru_en = [
  2. 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd',
  3. 'е' => 'e', 'ё' => 'yo', 'ж' => 'zh', 'з' => 'z',
  4. 'и' => 'i', 'й' => 'i', 'к' => 'k', 'л' => 'l', 'м' => 'm',
  5. 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's',
  6. 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c',
  7. 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', 'ъ' => '', 'ы' => 'y',
  8. 'ь' => '', 'э' => 'e', 'ю' => 'yu', 'я' => 'ja'
  9. ];
  10.  

Вам надо дополнить и добавить несуществующие буквы и их транслит на английский

#4 15 мая 2023 в 09:36

 My-InstantCMS.Ru, в system/languages/az/functions.php добавил, но всеравно не сработало.

  1. <?php
  2.  
  3. /**
  4.  * Returns months names for current language
  5.  * @return array
  6.  */
  7. function lang_months() {
  8. return [
  9. 'yanvar', 'fevral', 'mart', 'aprel', 'may', 'iyun',
  10. 'iyul', 'avqust', 'sentyabr', 'oktyabr', 'noyabr', 'dekabr'
  11. ];
  12. }
  13.  
  14. /**
  15.  * Returns days names for current language
  16.  * @return array
  17.  */
  18. function lang_days() {
  19. return [
  20. 'b', 'be', '&ccedil;a', '&ccedil;', 'ca', 'c', 'ş'
  21. ];
  22. }
  23.  
  24. /**
  25.  * Returns date for current language
  26.  * @param string $date_string
  27.  * @return string
  28.  */
  29. function lang_date($date_string) {
  30.  
  31. $eng_months = [
  32. 'January', 'February', 'March', 'April', 'May', 'June',
  33. 'July', 'August', 'September', 'October', 'November', 'December'
  34. ];
  35.  
  36. return str_replace($eng_months, lang_months(), $date_string);
  37. }
  38.  
  39. /**
  40.  * Converts string from current language to SLUG
  41.  * @param string $string Input string
  42.  * @param boolean $disallow_numeric Disallow numeric SLUG
  43.  * @return string
  44.  */
  45. function lang_slug($string, $disallow_numeric = true) {
  46.  
  47. $string = strip_tags(trim($string));
  48. $string = mb_strtolower($string);
  49. $string = str_replace(' ', '-', $string);
  50.  
  51. $slug = preg_replace('/[^a-zа-яё0-9\-\/]/u', '-', $string);
  52. $slug = preg_replace('/([-]+)/i', '-', $slug);
  53. $slug = trim($slug, '-');
  54.  
  55. $ru_en = [
  56. 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd',
  57. 'е' => 'e', 'ё' => 'yo', 'ж' => 'zh', 'з' => 'z',
  58. 'и' => 'i', 'й' => 'i', 'к' => 'k', 'л' => 'l', 'м' => 'm',
  59. 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's',
  60. 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c',
  61. 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', 'ъ' => '', 'ы' => 'y',
  62. 'ь' => '', 'э' => 'e', 'ю' => 'yu', 'я' => 'ja', 'ə' => 'e',
  63. 'ş' => 's', 'ı' => 'i', '&ccedil;' => 'c', '&uuml;' => 'u', '&ouml;' => 'o',
  64. 'ğ' => 'g',
  65. ];
  66.  
  67. $slug = strtr($slug, $ru_en);
  68.  
  69. if (!$slug) {
  70. $slug = 'untitled';
  71. }
  72. if ($disallow_numeric && is_numeric($slug)) {
  73. $slug .= strtolower(date('F'));
  74. }
  75.  
  76. return $slug;
  77. }
  78.  
  79. /**
  80.  * Set locale information
  81.  * @return mixed
  82.  */
  83. function lang_setlocale() {
  84.  
  85. $locale = 'ru_RU.UTF-8';
  86.  
  87. setlocale(LC_COLLATE, $locale);
  88. setlocale(LC_CTYPE, $locale);
  89. setlocale(LC_MONETARY, $locale);
  90. setlocale(LC_TIME, $locale);
  91. if (defined('LC_MESSAGES')) {
  92. setlocale(LC_MESSAGES, $locale);
  93. }
  94. setlocale(LC_NUMERIC, 'POSIX');
  95.  
  96. return true;
  97. }
  98.  
  99. /**
  100.  * Locale name
  101.  */
  102. define('LC_LANGUAGE_TERRITORY', 'ru_RU');
  103.  
  104. /**
  105.  * Locale validate regexp
  106.  */
  107. define('LC_LANGUAGE_VALIDATE_REGEXP', "/^([a-zа-яёй0-9 \.\?\@\,\-]*)$/ui");
  108.  
#5 15 мая 2023 в 11:07

 F_a_R_i_D,  сработает только для новых записей и если язык выбран AZ 

#6 15 мая 2023 в 14:21

 My-InstantCMS.Ru, Язык выбран AZ.

Создаю новый контент и тоже самое.

#7 15 мая 2023 в 14:40

Тогда не знаю, надо копать прямо в хостинге

#8 22 мая 2023 в 14:35

Актуально

#9 22 мая 2023 в 15:01

 F_a_R_i_D, вы там (functions.php) всё перепутали по моему. Например, почему у вас русская локаль   $locale = 'ru_RU.UTF-8'; ?  Далее в этой строке

 $slug = preg_replace('/[^a-zа-яё0-9\-\/]/u', '-', $string); нет азербайджанских символов. У вас должно быть вместо а-яё начальная и конечная буквы вашего алфавита наверное. То же самое в 102 и 107 стр.

#10 22 мая 2023 в 16:58

 Lora, Я один раз поменял локаль с ru на az и сайт начал выдавать ошибки, поэтому вернул обратно на место.

#11 23 мая 2023 в 09:42

А у вас весь перевод сайта выполнен?

#12 23 мая 2023 в 15:39

 Lora, Где-то на 60-70 %

#13 25 мая 2023 в 09:14

Как вариант

  1. function lang_slug($string, $disallow_numeric = true) {
  2.  
  3. $az_en = array(
  4. 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd',
  5. 'е' => 'e', 'ё' => 'yo', 'ж' => 'zh', 'з' => 'z',
  6. 'и' => 'i', 'й' => 'i', 'к' => 'k', 'л' => 'l', 'м' => 'm',
  7. 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's',
  8. 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c',
  9. 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', 'ъ' => '', 'ы' => 'y',
  10. 'ь' => '', 'э' => 'e', 'ю' => 'yu', 'я' => 'ja', 'ə' => 'e',
  11. 'ş' => 's', 'ı' => 'i', '&ccedil;' => 'c', '&uuml;' => 'u', '&ouml;' => 'o',
  12. 'ğ' => 'g'
  13. );
  14.  
  15. $slug = strtr($string, $az_en); // заменяем символы на азербайджанские латинские эквиваленты
  16. $slug = preg_replace('/[^a-z0-9\-\/]/i', '-', $slug); // заменяем не буквенно-цифровые символы на дефисы
  17. $slug = trim($slug, '-'); // удаляем дефисы в начале и конце строки
  18. $slug = strtolower($slug); // приводим все к нижнему регистру
  19.  
  20.  
  21. if (!$slug) {
  22. $slug = 'untitled';
  23. }
  24. if ($disallow_numeric && is_numeric($slug)) {
  25. $slug .= strtolower(date('F'));
  26. }
  27.  
  28. return $slug;
  29. }

Должно работать

Добавлено спустя 17 часов

А так же ваш массив алфавита не верен. Вот тут алфавит, нужно составить согласно его. А так же в utf-8 можно не использовать html сущности

#14 26 мая 2023 в 15:42

 Lora, Благодарю! Заработало.

Всмысле массив алфавита не верен?

Добавлено спустя 14 минут

 Lora, Хотя, не совсем.

Создал материал в разделе новости, опять всё неправильно.

prnt.sc/xg4w0RKrlUgB

#15 26 мая 2023 в 16:18

Всмысле массив алфавита не верен?

F_a_R_i_D
  1. $az_en = array(
  2. 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd',
  3. 'е' => 'e', 'ё' => 'yo', 'ж' => 'zh', 'з' => 'z',
  4. 'и' => 'i', 'й' => 'i', 'к' => 'k', 'л' => 'l', 'м' => 'm',
  5. 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's',
  6. 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c',
  7. 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', 'ъ' => '', 'ы' => 'y',
  8. 'ь' => '', 'э' => 'e', 'ю' => 'yu', 'я' => 'ja', 'ə' => 'e',
  9. 'ş' => 's', 'ı' => 'i', '&ccedil;' => 'c', '&uuml;' => 'u', '&ouml;' => 'o',
  10. 'ğ' => 'g'
  11. );

Тут мало того, что лишние символы(буквы), так ещё и не хватает. Я же вам дал ссылку на алфавит.  И вот оттуда нужно составить массив по аналогии $az_en

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.