【发布时间】:2019-02-10 16:38:38
【问题描述】:
我的网站有 2 个问题。 这是一个多语言的(德语,英语)。 我总是将翻译保存在这样的 XML 文档中
<?xml version="1.0" encoding="utf-8"?>
<root>
<les>
<en>Lesson</en>
<de>Lektion</de>
</les>
然后我将这些 XML 变量转换为 php 变量并在需要的地方回显它们
$xml=simplexml_load_file("langindex.xml") or die("xml not found!");
$les = $xml->les->$lang;
<?php echo $les;?>
问题 1 是当我打开网站时没有将语言设置为默认语言,所以我总是必须先选择一种语言,即使我包含了 !isset。如果我不选择任何东西,一些图像会被拉伸,并给我一个没有设置语言的错误。
<?php
session_start();
$page = 0;
$lang = $_GET['lang'];
$langArray = array('en','de');
$found = false;
if(in_array($lang, $langArray))
$found = true;
if(!$found)
$lang = 'en';
if(!isset($_SESSION['lang']))
$_SESSION['lang'] = 'en';
if(isset($_GET['lang']) && in_array($_GET['lang'], array('en', 'de')))
$_SESSION['lang'] = $_GET['lang'];
include '../nihongo/php/dbconnect.php';
我的语言切换使用简单的<a href="?lang=X">,并且 ?lang=X 也会显示在 URL 中。
够了。 由于 XML 非常不切实际,我想将整个东西切换到 SQL 数据库。
我创建了一个包含 ID、德语和英语列的表,并成功连接了数据库。 现在我想让 PHP 告诉 SQL 只获取会话语言的文本,例如这样的选择。
SELECT german FROM texts WHERE ID = '1'
SELECT english FROM texts WHERE ID = '2'
我的问题是我真的不知道如何用 PHP 做到这一点。 我认为我要么必须以某种方式将 PHP var 放入语句中,要么选择整行并让 PHP 决定应该显示哪一个。 欢迎提出任何意见/建议! 提前致谢!
【问题讨论】:
-
我认为这取决于你想如何攻击它。您可以创建一个查询键的函数,然后让它输出文本,例如,如果您有一些像这样的 html:= getText('main_menu', 'german' ) ?> 另外,如果我要使用数据库,我可能会先检查 redis 或 memcache,然后再检查数据库。说实话,我可能会使用 gettext 并且仅在翻译公司使用工具填充并使用 TAL 模板之后使用数据库作为生成这些文件的一种方式。
-
我不会尝试开发 i18n 的自定义实现,而是使用维护良好并被证明可以像 symfony.com/doc/current/components/translation.html 或 docs.zendframework.com/zend-i18n 一样工作的现有库。
标签: php mysql database session multilingual