Изцяло да заменя файловете. Първия вариант.
Прехвърляне на масиви от файлове към база данни
Re: Прехвърляне на масиви от файлове към база данни
Просто решение.
Ако, някой може да препоръча някакви подобрение - отворен съм.
Code: Select all
<?php
class Lang {
public $current;
public $default = 'us';
public $map = [
'us' => 'us', //United States - English
'gb' => 'gb', //United Kingdom - English
'de' => 'de', //Deutsch
'es' => 'es', //Español
'it' => 'it', //Italiano
'fr' => 'fr', //Français
];
public $data = [];
private $dir;
public function __construct() {
$this->dir = ENGINE_DIR . '/data/lang/';
$this->current = $this->default;
if ( isset($_REQUEST['lang']) && in_array($_REQUEST['lang'], $this->map) ) {
$this->set($_REQUEST['lang']);
}
// Determine the current language
if ( isset($_COOKIE['lng']) && is_string($_COOKIE['lng']) && array_key_exists($_COOKIE['lng'], $this->map) ) {
if ( file_exists($this->dir . $this->map[$_COOKIE['lng']] . '.php') ) {
$this->current = $this->map[$_COOKIE['lng']];
}
} elseif ( isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ) {
$lang = substr(strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']), 0, 2);
if ( $lang && array_key_exists($lang, $this->map) ) {
$this->current = $this->map[$lang];
}
}
}
public function get() {
global $db;
if ( file_exists($this->dir . $this->current . '.php') ) {
$SArray = $db->query( "SELECT `pld_id`, `pld_key`, `pld_data` FROM `promo_lang_data` WHERE `lang_id` = '" . (string)$this->current . "';" );
if(mysqli_num_rows($SArray) > 0) {
while ($obj = $SArray->fetch_object()) {
$rows[$obj->pld_key] = $obj->pld_data;
}
$this->data = $rows;
$this->merge();
return $this->data;
} else {
die('Language file not found, contact by administrator.');
}
} else {
die('Language file not found, contact by administrator.');
}
}
public function set($lang) {
$expire = 365 * 86400 + time(); // 1 год
$domain = str_replace(['http://', 'https://'], '', mb_strtolower($_SERVER['HTTP_HOST'], 'utf-8'));
if ( substr( $domain, 0, 4 ) == 'www.' ) $domain = substr( $domain, 4 );
setcookie( 'lng', $lang, $expire, '/', $domain, NULL, TRUE );
$_COOKIE['lng'] = $lang;
}
private function merge() {
global $db;
if ( $this->current != $this->default ) {
if ( file_exists($this->dir . $this->default . '.php') ) {
$SArray = $db->query( "SELECT `pld_id`, `pld_key`, `pld_data` FROM `promo_lang_data` WHERE `lang_id` = '" . (string)$this->default . "';" );
if(mysqli_num_rows($SArray) > 0) {
while ($obj = $SArray->fetch_object()) {
$rows[$obj->pld_key] = $obj->pld_data;
}
$this->data = array_merge($rows, $this->data);
} else {
die('Language file not found, contact by administrator.');
}
} else {
die('Language file not found, contact by administrator.');
}
}
}
}
Re: Прехвърляне на масиви от файлове към база данни
Четеш папката с файловете, вземаш списъм с тях, отваряш ги един по един, четеш съдържанието и записваш в базата.
Не виждам какво ти е виновен форума ако не се справяш с такива лесни задачи
Не виждам какво ти е виновен форума ако не се справяш с такива лесни задачи
- Revelation
- Web-tourist
- Posts: 921
- Joined: Sun Mar 24, 2013 1:23 pm
Re: Прехвърляне на масиви от файлове към база данни
Аз не разбрах къде се запъна със задачката, за това и не съм отговарял. До колкото четох и сам се оправи.
Иначе не смятам, че е добра идея преводите да са ти в базата данни. За всяко нещо ще имаш разходка до базата данни специално да вземеш превод. Ако не замисляш да имплементираш някакъв вид кеширане в паметта, това решение е меко казано лошо.
Иначе не смятам, че е добра идея преводите да са ти в базата данни. За всяко нещо ще имаш разходка до базата данни специално да вземеш превод. Ако не замисляш да имплементираш някакъв вид кеширане в паметта, това решение е меко казано лошо.
Re: Прехвърляне на масиви от файлове към база данни
Реших , че може да стане "дискусия". Иначе, да. Кеширах нещата, добавил и други изгъзици и глезотии.