网站内部化 - 最佳规则

时间:2016-07-08 17:33:32

标签: php internationalization

我正在使用PHP。

我有一个系统,我需要翻译成法语,意大利语,西班牙语......

所以我提出了两个解决方案。

解决方案1: 所有语言字符串都存储在数据库中,以便管理员可以轻松编辑。因此,在每个页面上,我需要调用此表以获取正确的字符串。

解决方案2: 与第一个相同,除了我将在每次更改Json文件后生成。将在每个页面上调用此Json文件以打印正确的字符串。

我的解决方案的女巫是最好的请求?

或许,存在另一种解决方案吗?

感谢。

2 个答案:

答案 0 :(得分:1)

我曾经做过多种语言的项目。这是一个很大的麻烦。我不推荐下面的方法,而是向您展示如何实现它。

lang.en.php

$lang = array();

$lang['menu'] = array(
  'home'     => 'Home',
  'projects' => 'Projects',
  'about'    => 'About',
  'contact'  => 'Contact'
);

$lang['some_other_section'] = array(
  'some_value' => 'some value',
  ...
  ...
);

lang.no.php

$lang = array();

$lang['menu'] = array(
  'home'     => 'Hjem',
  'projects' => 'Prosjekter',
  'about'    => 'Om',
  'contact'  => 'Kontakt'
);

$lang['some_other_section'] = array(
  'some_value' => 'En annen verdi',
  ...
  ...
);

现在,最大的麻烦是使用变量在应用程序中编写所有文本,然后添加它们并在每个语言文件中进行翻译。

的index.php

<div class="menu">
  <a href="#"><?php echo $lang['menu']['home']; ?></a>
  <a href="#"><?php echo $lang['menu']['projects']; ?></a>
  <a href="#"><?php echo $lang['menu']['about']; ?></a>
  <a href="#"><?php echo $lang['menu']['contact']; ?></a>
</div>

您必须设置&#34;有效&#34;语言在页面初始化的某些地方。即:

<?php
  session_start();

  if($_SESSION['lang'] == "en") {

    require('lang.en.php');

  } elseif($_SESSION['lang'] == "no") {

    require('lang.no.php');

  }

?>
<html>
<head>
 ...
 ...

答案 1 :(得分:0)

使用数据库:您可以在包含每种语言答案的表格中保存问题和答案 - 这很简单,然后设置RBAC模块以允许特定用户添加新的问题和答案。

questions_table:
    question_id (int) 255 PK AUTO_INCREMENT
    question (varchar) 160

answers_table:
    answer_id (int) 255 PK AUTO_INCREMENT
    question_id (int) 255
    language_id (int) 255
    answer (varchar)

language_table:
    language_id (int) 255 PK AUTO_INCREMENT
    language (varchar) 30

user table and user answer table also

使用这个,您将能够使用INNER JOIN sql语句在表之间进行引用,然后您需要做的就是为您的连接创建一个驱动程序对象(最好是pdo),然后为回答问题的对象,登录,注册,管理和前端显示。