[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Мультиязычность на сайте
Billig
Хочу сделать мультиязычность на сайте. Для этих целей сделал поля вроде 'item_name_ru','item_name_en' и пробовал такое
PHP
$lang = 'ru';
 $result = mysql_query("SELECT title_$lang,metad_$lang,metak_$lang,text_$lang FROM settings WHERE page='$file'",$db);
 $myrow = mysql_fetch_array($result);

Выдает ошибку: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in settings.php on line 6
Подскажите пожалуйста правильный синтаксис



Спустя 6 минут, 12 секунд (16.10.2009 - 22:37) Kuliev написал(а):
Billig
PHP
$lang "ru";
$sql = ("SELECT `title_".$lang."`,`metad_".$lang."`,`metak_".$lang."`,`text_".$lang."`
        FROM `settings`
        WHERE `page`='"
.$file."'");
$result mysql_query($result) or die (mysql_error() ."<br/>"$sql);
$row mysql_fetch_assoc($result);

Спустя 12 минут, 30 секунд (16.10.2009 - 22:49) Billig написал(а):
Выдает ошибку:
Query was empty
SELECT `title_ru`,`metad_ru`,`metak_ru`,`text_ru` FROM `settings` WHERE `page`='services'

Что это значит? в таблице в этих полях у меня есть записи

Спустя 9 минут, 5 секунд (16.10.2009 - 22:58) Kuliev написал(а):
Цитата (Billig @ 17.10.2009 - 00:49)
Выдает ошибку:
Query was empty
SELECT `title_ru`,`metad_ru`,`metak_ru`,`text_ru` FROM `settings` WHERE `page`='services'

Что это значит? в таблице в этих полях у меня есть записи

Покажите Ваш код где применяется этот запрос!

Спустя 4 минуты, 26 секунд (16.10.2009 - 23:03) Billig написал(а):
вот код запроса
PHP
$db = mysql_connect("localhost","root","") or die('Connection error.');
mysql_query("SET NAMES 'cp1251'");
mysql_select_db("sp",$db);
$file = basename($_SERVER['PHP_SELF'], ".php"); 
$lang 
= "ru";
$sql = ("SELECT `title_".$lang."`,`metad_".$lang."`,`metak_".$lang."`,`text_".$lang."`
        FROM `settings`
        WHERE `page`='"
.$file."'");
$result = mysql_query($result) or die (mysql_error() ."<br/>". $sql);
$row = mysql_fetch_assoc($result);


Чтобы вывести результаты такой должен быть синтаксис? - echo $row['title_".$lang."'];

Спустя 4 минуты, 10 секунд (16.10.2009 - 23:07) Kuliev написал(а):
Billig
АХА

Спустя 1 минута, 26 секунд (16.10.2009 - 23:08) Billig написал(а):
не работает, пустая страница и эта ошибка sad.gif

Спустя 4 минуты, 42 секунды (16.10.2009 - 23:13) sergeiss написал(а):
Цитата (Billig @ 17.10.2009 - 00:03)
echo $row['title_".$lang."'];

Не совсем smile.gif Не усложняй. Сделай минимально достаточное преобразование
PHP
echo $row [ 'title_'.$lang ];


Вывод сделай лучше так:
PHP
$output=0;
while(
 $row=mysql_fetch_assoc($result) )
{
$output++;
// и тут уже выводить данные 

}


По окончании цикла можно проверить, сколько реально строк было выведено (обработано).

PS. Да, и еще существенно!!!
Перед запуском запроса сделай его вывод:
PHP
echo $sql.'<br>';

Спустя 12 минут, 13 секунд (16.10.2009 - 23:25) Billig написал(а):
брррр, помоему не помогает, как при таком коде правильно вывести?
PHP
<?php 
include ("../inc/bd.php");
$file basename($_SERVER['PHP_SELF'], ".php"); 
$lang "ru";
$sql = ("SELECT `title_".$lang."`,`metad_".$lang."`,`metak_".$lang."`,`text_".$lang."`
        FROM `settings`
        WHERE `page`='"
.$file."'");
$result mysql_query($result) or die (mysql_error() ."<br/>"$sql);
$row mysql_fetch_assoc($result);
echo 
$sql.'<br>';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?php echo $row['title_'.$lang]; ?> - Spiritum</title>
<link rel="stylesheet" href="../css/style.css" type="text/css" />
<link rel="stylesheet" href="../css/pages.css" type="text/css" />
<meta name="description" content="<?php echo $row['metad_'.$lang]; ?>" />
<meta name="keywords" content="<?php echo $row['metak_'.$lang]; 

Спустя 5 минут, 46 секунд (16.10.2009 - 23:31) sergeiss написал(а):
Цитата (Billig @ 17.10.2009 - 00:25)
как при таком коде правильно вывести?


Для этого достаточно прочитать внимательно:
Цитата (sergeiss @ 17.10.2009 - 00:13)
Перед запуском запроса сделай его вывод:


Ключевое слово "перед"!!!!!!!!!!!!!!!!!!!1

PHP
$sql = "SELECT `title_".$lang."`,`metad_".$lang."`,`metak_".$lang."`,`text_".$lang."`
        FROM `settings`
        WHERE `page`='"
.$file."'";
echo $sql.<br>;
$result = mysql_query($result) or die (mysql_error() ."<br/>". $sql);
$row = mysql_fetch_assoc($result);

И скобки круглые для запроса не нужны - ты же просто строку символьную формируешь.

Спустя 4 минуты, 27 секунд (16.10.2009 - 23:35) Billig написал(а):
Теперь выводит такую ошибку:
SELECT `title_ru`,`metad_ru`,`metak_ru`,`text_ru` FROM `settings` WHERE `page`='services'
Query was empty
SELECT `title_ru`,`metad_ru`,`metak_ru`,`text_ru` FROM `settings` WHERE `page`='services'

Спустя 3 минуты, 3 секунды (16.10.2009 - 23:39) glock18 написал(а):
Капец, ну перестаньте уже копипастить все подряд:
mysql_query($result) -> mysql_query($sql)

Спустя 2 минуты, 3 секунды (16.10.2009 - 23:41) sergeiss написал(а):
glock18- ну это... бывает... biggrin.gif Тем более посреди ночи smile.gif

Я туда даже и не смотрел rolleyes.gif

Спустя 2 минуты, 5 секунд (16.10.2009 - 23:43) Kuliev написал(а):
Цитата (sergeiss @ 17.10.2009 - 01:41)
glock18- ну это... бывает... biggrin.gif Тем более посреди ночи smile.gif

Я туда даже и не смотрел rolleyes.gif

Я сам только заметил laugh.gif

Спустя 7 минут, 6 секунд (16.10.2009 - 23:50) glock18 написал(а):
sergeiss
Да я и не тебе, а ТСу smile.gif Еще одна моя мечта - отучить людей копипастить все подряд. Тех, с кем по жизни сталкиваюсь smile.gif копипаст чаще проблемы приносит, чем помогает.

Спустя 53 секунды (16.10.2009 - 23:51) Billig написал(а):
Цитата (glock18 @ 16.10.2009 - 20:39)
Капец, ну перестаньте уже копипастить все подряд:
mysql_query($result) -> mysql_query($sql)

получилось laugh.gif glock18 респект друг

Спустя 1 минута, 23 секунды (16.10.2009 - 23:52) Kuliev написал(а):
Billig
ЭЭЭЭ а как же Я blink.gif

Спустя 3 минуты, 48 секунд (16.10.2009 - 23:56) Billig написал(а):
тебе Kuliev вообще мегареспектище smile.gif Уже не первый раз выручаеш, спасибо большое что помагаете начинающим С меня user posted image

Спустя 1 минута, 35 секунд (16.10.2009 - 23:57) Kuliev написал(а):
Цитата (Billig @ 17.10.2009 - 01:56)
тебе Kuliev вообще мегареспектище smile.gif Уже не первый раз выручаеш, спасибо большое что помагаете начинающим С меня user posted image

Теперь мона идти спокойно спать tongue.gif

Спустя 2 минуты, 31 секунда (17.10.2009 - 00:00) sergeiss написал(а):
Э-хе-хе... А мои советы "побоку", да? mad.gif А ведь там тоже было кое-что полезное....

Ладно-ладно! wink.gif

Спустя 5 минут, 12 секунд (17.10.2009 - 00:05) Billig написал(а):
Цитата (Kuliev @ 16.10.2009 - 20:57)
Цитата (Billig @ 17.10.2009 - 01:56)
спасибо большое что помагаете начинающим С меня  user posted image



это ко всем относилось и к тебе тоже sergeiss))) Тебе тожеотдельный респект smile.gif)
Ребята вам всем кто помогает огромное спаибо, надеюсь никого не забыл ))

Спустя 10 минут, 4 секунды (17.10.2009 - 00:15) SunSet написал(а):
Billig
А как же я?)))))
Ну ладно, тут я чтото не удержался от раздачи благодарностей... biggrin.gif

Спустя 1 час, 43 минуты, 3 секунды (17.10.2009 - 01:58) Billig написал(а):
усложняю скрипт, по клику на ссылке передается значение ru или en которое записывается в $_SESSION а затем в $lang = $_SESSION['lang'];
PHP
if(isset($_GET['lang'])) {
     if(
$_GET['lang']) {
         
$_SESSION['lang'] = $_GET['lang'];
     }
 }
 
 if(empty(
$_SESSION['lang']) || !in_array($_SESSION['lang'], array('ru''en'))) {
     
$_SESSION['lang'] = 'en';
 }
$lang $_SESSION['lang'];

Когда клацаю по ссылке все работает, но сессия почемуто не сохраняется, при переходе на др страницы включается значение по умолчанию $_SESSION['lang'] = 'en';
SunSet не знаеш как исправить? smile.gif

Спустя 1 час, 10 минут, 59 секунд (17.10.2009 - 03:09) SunSet написал(а):
А так не то?
PHP
if(isset($_GET['lang'])) {
$_SESSION['lang'] = $_GET['lang'];
}
else {
$_SESSION['lang'] = 'en';
}

Но если вдруг заработает - то все удали, мне не разрешают давать примеры индусского кода))

Спустя 9 минут, 1 секунда (17.10.2009 - 03:18) Billig написал(а):
Таже фигня smile.gif

Спустя 1 минута, 38 секунд (17.10.2009 - 03:20) SunSet написал(а):
Billig
А ссылка то как выглядит?

И это не забыл? session_start();

Спустя 6 минут, 41 секунда (17.10.2009 - 03:27) Billig написал(а):
session_start(); забыл наверно )))

Спустя 7 минут, 2 секунды (17.10.2009 - 03:34) Billig написал(а):
Урааааааа, заработало ))))))) спасибо за session_start(); я с сесиями никогда раньше не работал smile.gif
Кстати заработало на моем варианте скрипта, на твоем - нет smile.gif

Спустя 4 минуты, 2 секунды (17.10.2009 - 03:38) SunSet написал(а):
PHP
if(isset($_GET['lang'])) {
$_SESSION['lang'] = $_GET['lang'];
}
else {
$_SESSION['lang'] = 'en';
$lang = $_SESSION['lang'];
}

Потому что я про переменную $lang не думал. Проверь вот этот вариант, заработает ли, мне интересно smile.gif

Спустя 2 часа, 19 минут, 33 секунды (17.10.2009 - 05:57) olgatcpip написал(а):
Всё это родило вопрос: как лучше создавать мультиязычность?

Может писать все запросы как-то так
'select ... from '.$shema.'.table' where....'где $shema = название языка (ru,fr,eng)

Т.о. при создании нового языка нужно бужет только добывить новую схему. Что в принцепе ожно сделать и из админки... Более того наверно возможно и копировать структуру без данных в новую схему...

На сколько это затратно? есть ли в таком способе решения хоть капля здравого смысла?

Спустя 4 часа, 40 минут, 32 секунды (17.10.2009 - 10:38) sergeiss написал(а):
olgatcpip - вопрос про схему - это вопрос про Постгре. А в MySQL есть ли такое понятие??? Если нету, то любители MySQL просто не поймут вопрос.

Насколько я понимаю, мультиязычность - это разница в первую очередь в интерфейсе и связанных с ним таблицах. "Простые" данные (если это форум, например) должны лежать в одних и тех же таблицах.
Вопрос: насколько будет удобно только часть данных делать в разных схемах, а другую часть - только в одной?
Здравый смысл есть в этом, наверное smile.gif Другой вопрос, будет ли это удобно?

Спустя 7 минут, 28 секунд (17.10.2009 - 10:45) olgatcpip написал(а):
sergeiss я об это и спрашиваю.
Делая простые стайти с разными языками, сейчас я деляю типа так:
есть возможность добавляить страницы для сайта. так вот просто добавляем страницы и пишем в них название, описание не на русском и всё. А в БД никакого отличая в русских и не русских записях нет. т.е. только сожержание на разных языках, а обращение к контенту в БД запросы одни и те же. Т.е. не нужно придумывать новые поля и всё такое..

Но у меня и проблем не возникало тех, что у создателя этого форума..

Спустя 4 минуты, 53 секунды (17.10.2009 - 10:50) sergeiss написал(а):
Просто статьи с разными языками - это другое дело, это НЕ мультиязычность! Это - просто разноязычный контент.

А мультиязычность - это когда юзер имеет возможность указать, что он хочет иметь интерфейс на таком-то или на таком-то языке. И в зависимости от выбранного языка, именно на нем начинают появляться все надписи сайта. Включая почти все картинки (например, на кнопках).

PS. Пример.
Зайди на этом форуме в "Мой профиль" (вверху страницы). Там выбери "Скины и языки", и выбери English. И выбери затем "Сохранить изменения" smile.gif
Правда, тут это не срабатывает... Но если сработает, то как раз и будет пример мультиязычности.

Спустя 46 минут, 47 секунд (17.10.2009 - 11:37) olgatcpip написал(а):
http://portbaikal.com/ - не мультиязычный?

Спустя 22 минуты, 46 секунд (17.10.2009 - 12:00) sergeiss написал(а):
olgatcpip - этот - мультиязычный, коли статьи тоже "меняют язык" smile.gif Просто я сначала так понял, что ты говоришь немного о другом, типа как о форуме. У которого меняется только язык оформления сайта.

А для такого... Не уверен, что разные схемы тут помогут. Мало того, что при изменении структуры БД придется делать это в разных схемах, так еще есть все-таки и "единая" часть в виде картинок. Информацию о которых хранить или в некой "общей" схеме, или дублировать во все схемы.
Мягко говоря, неудобно будет.

PS. Интересно - а почему там нету русского языка? wink.gif

Спустя 1 час, 21 минута, 56 секунд (17.10.2009 - 13:22) Billig написал(а):
Цитата (SunSet @ 17.10.2009 - 00:38)
Потому что я про переменную $lang не думал. Проверь вот этот вариант, заработает ли, мне интересно smile.gif

Не работает smile.gif Так как ты не присваиваеш значение в переменную $lang если условие выполняется.. если вписать туда $lang = $_SESSION['lang'] язык переключается на текущей странице но дальше сесия почемуто не сохраняется..

По поводу того как создавать мультиязычность, в моем случае это лучший вариант smile.gif

Спустя 17 минут, 53 секунды (17.10.2009 - 13:39) Billig написал(а):
Как правильно написать условие что если поле в базе пустое чтоб выводилось одно, не пустое - другое?
пробую
PHP
if ($row['text_'.$lang]==''){echo }
else{echo }

Поле пустое, но условие не выполняется

Спустя 21 минута, 12 секунд (17.10.2009 - 14:01) olgatcpip написал(а):
Цитата
PS. Интересно - а почему там нету русского языка?
не знаю. они сами придумывают какие языки делать и сами делают

Спустя 23 минуты, 20 секунд (17.10.2009 - 14:24) twin написал(а):
Вот я кстати сейчас начал делать заказик один. Мультиязычный.

Спустя 6 минут, 48 секунд (17.10.2009 - 14:31) Billig написал(а):
twin а незнаеш случайно ответа по моему вопросу?

Спустя 58 минут, 25 секунд (17.10.2009 - 15:29) olgatcpip написал(а):
twin самое нудное потом все системные сообщения на др языки переводить.

Спустя 7 часов, 13 минут, 17 секунд (17.10.2009 - 22:42) FatCat написал(а):
Billig
PHP
if (trim($row['text_'.$lang])) // Условие не пустое
else // Пустое

Спустя 1 час, 3 минуты, 36 секунд (17.10.2009 - 23:46) twin написал(а):
Цитата
twin а незнаеш случайно ответа по моему вопросу?

если чесно, я не понял вопроса... я не с начала участавовал...
Цитата
twin самое нудное потом все системные сообщения на др языки переводить.

вовсе нет... я вообще этого не делаю. максимум русский и английский для саморазвития. пусть сами, хоть на ирокезский. а мультиязычность просто решается. Одной строчкой... Вот тут я писал про это.

Спустя 22 минуты, 59 секунд (18.10.2009 - 00:09) Billig написал(а):
Цитата (FatCat @ 17.10.2009 - 19:42)
Billig
PHP
if (trim($row['text_'.$lang])) // Условие не пустое
else // Пустое

тоже самое sad.gif не работает

Спустя 2 минуты, 38 секунд (18.10.2009 - 00:12) Billig написал(а):
Цитата (twin @ 17.10.2009 - 20:46)
если чесно, я не понял вопроса... я не с начала участавовал...

я спрашивал как написать проверку на заполненость поля в базе?
Пробую
PHP
if ($row['text_'.$lang]==''){echo }
 else{echo }


Поле пустое, но условие не выполняется почемуто

Спустя 7 минут, 55 секунд (18.10.2009 - 00:20) sergeiss написал(а):
Там, в этом поле, могут быть (теоретически) пробелы. Которые ты не видишь.

Поэтому попробуй
PHP
if ( trim$row['text_'.$lang] )==''){echo }
 else{echo }


Опять же - там есть дефолтовое значение у поля? Если есть, то какое?

Спустя 5 минут, 23 секунды (18.10.2009 - 00:25) Billig написал(а):
попробовал ваш вариант - неработает sad.gif дефолтовое значение стоит NULL

Спустя 8 минут, 24 секунды (18.10.2009 - 00:33) sergeiss написал(а):
А ежели NULL - то почему ты сравниваешь с пустой строкой? Попробуй так:
PHP
if ( trim$row['text_'.$lang] )== NULL){echo }
 else{echo }

Спустя 2 минуты, 49 секунд (18.10.2009 - 00:36) Billig написал(а):
пробовал, тоже самое, неработает ((

Спустя 40 минут, 26 секунд (18.10.2009 - 01:17) Billig написал(а):
подскажите как задать может проверку на наличие в поле текста? сделаю от обратного

Спустя 59 минут, 47 секунд (18.10.2009 - 02:16) Billig написал(а):
всем спасибо, все работает, то я туплю.. не делалась выборка из базы нужного поля
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.