Forum

Notifications
Clear all

L10N - general UTF-8 Russian fix [HOW-TO]

Anonymous
 Anonymous
(@Anonymous)
Guest

Как раз и навсегда решить проблемы с локализацией.

Переводим всю БД и все таблицы БД в utf8_general_ci


ALTER TABLE `table_name` CONVERT TO CHARACTER SET 'utf8';

Определяем UTF-8 в функции подключения к БД:
mysql_functions.php
Изменить это:

function dbconnect($dbhost, $dbuser, $dbpass, $dbname ) {
$mysql_access = mysql_connect($dbhost, $dbuser, $dbpass);
if(!$mysql_access) {
include(_BASEDIR."languages/en.php");
die(_FATALERROR." "._NOTCONNECTED);
}
mysql_select_db($dbname, $mysql_access);
return $mysql_access;
}

На это:

function dbconnect($dbhost, $dbuser, $dbpass, $dbname ) {
$mysql_access = mysql_connect($dbhost, $dbuser, $dbpass);
if(!$mysql_access) {
include(_BASEDIR."languages/en.php");
die(_FATALERROR." "._NOTCONNECTED);
}
mysql_select_db($dbname, $mysql_access);
mysql_set_charset("utf8", $mysql_access);
return $mysql_access;
}

mysqli_functions.php
Изменить это:

function dbconnect($dbhost, $dbuser, $dbpass, $dbname ) {
$mysql_access = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
if(mysqli_connect_error()) {
include(_BASEDIR."languages/en.php"); // Because we haven't got a language set yet.
die(_FATALERROR." "._NOTCONNECTED);
}
return $mysql_access;
}

На это:

function dbconnect($dbhost, $dbuser, $dbpass, $dbname ) {
$mysql_access = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
if(mysqli_connect_error()) {
include(_BASEDIR."languages/en.php"); // Because we haven't got a language set yet.
die(_FATALERROR." "._NOTCONNECTED);
}
mysqli_set_charset($mysql_access, "utf8");
return $mysql_access;
}

В файле локализации прописываем:

define ("_CHARSET", "utf-8");

Готовый ru.php для eFiction 3.5.3
В файле storyform.php (строка 48) меняем htmlentities() на htmlspecialchars()
В файле javascript.js меняем все вызовы unescape() на decodeURI()
categorylist.php
Изменить это:

$find = array ('"', chr(150), chr(147), chr(148), chr(146));
$replace = array ('"', "-", """, """, "'");

На это:

$find = array (' ');
$replace = array ('+');

characterlist.php
Изменить это:

//header("Content-Type: text/html; charset=".CHARSET,true);

На это:

header("Content-Type: text/html; charset="._CHARSET,true);

А также это:

$find = array ('"', chr(150), chr(147), chr(148), chr(146));
$replace = array ('"', "-", """, """, "'");

На это:

$find = array (' ');
$replace = array ('+');

Разрешаем логины в UTF-8 (ники кириллицей):
В файлах:
user/editbio.php
user/login.php

Меняем все вхождения этого:

"!^[-a-z0-9_ ]{3,30}$!i"

На это:

"!^[-a-zа-я0-9_ ]{3,30}$!iu"

Исправляем подсчёт слов
В файле:
stories.php
Меняем все вхождения этого:

$pattern = "/[^(w|d|'|"|.|!|?|;|,|\|/|--|:|&|@)]+/";

На это:

$pattern = "/[^(w|а-я|ё|d|'|"|.|!|?|;|,|\|/|--|:|&|@)]+/iu";

(Строка 174 и 501)
Это решает все проблемы с локализацией.
P.S. Автор, выпускай апдейт!

Quote
Posted : 19/03/2012 10:47 am
Share: