Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 自动完成不同语言或:如何为web应用程序存储不同语言_Javascript_Php_Mysql_Localization - Fatal编程技术网

Javascript 自动完成不同语言或:如何为web应用程序存储不同语言

Javascript 自动完成不同语言或:如何为web应用程序存储不同语言,javascript,php,mysql,localization,Javascript,Php,Mysql,Localization,我在一个网站上工作,有一个名为“items”的mysql表,如: item_id | item (第二列仅用于标识项目id。) 在language1.php中,我用language1存储了一个数组,其中包含项的id和项本身的名称,如下所示: $items = array( 1 -> 'Apple', 2 -> 'Orange', ... ); 根据用户的语言,包含正确的语言文件 项目数组(

我在一个网站上工作,有一个名为“items”的mysql表,如:

item_id | item
(第二列仅用于标识项目id。)

在language1.php中,我用language1存储了一个数组,其中包含项的id和项本身的名称,如下所示:

$items = array(
1 -> 'Apple',
2 -> 'Orange',
...
);
根据用户的语言,包含正确的语言文件

项目数组(<1000个项目/数组)应有一个自动完成输入框。我想,用php(“search_array”或类似的函数)在language1.php中搜索数组不是一个好的解决方案,但我认为没有办法维护这个系统并通过mysql进行搜索,不是吗

您如何为网站存储不同的语言并使其可搜索


是否有必要将所有语言存储在mysql的特定列中?

我可能会添加一个
items\u本地化
表,其中包含以下列

item_id,
locale,
content, (in your base language of choice)
translation (the translated content)
localization_id,
locale,
content,
translation
item_id,
localization_id
它有一个指向
项目id
的外键,或者在
项目id,区域设置
上有一个复合主键,或者在
项目id,区域设置
上有一个自动递增id字段和唯一索引。有些人喜欢使用单列自动递增主键,因为他们使用的是框架,所以如果这描述了您,请使用后一种解决方案

或者,如果您想要一个更广泛的本地化解决方案,您可以使用一个
本地化
表,其中包含如下列

item_id,
locale,
content, (in your base language of choice)
translation (the translated content)
localization_id,
locale,
content,
translation
item_id,
localization_id
它可以存储任何类型的本地化。然后,您可以使用一个包含以下列的多个联接表

item_id,
locale,
content, (in your base language of choice)
translation (the translated content)
localization_id,
locale,
content,
translation
item_id,
localization_id
您只需执行一个连接查询即可获得所需的本地化。对于使用第一个建议的表结构:

SELECT i.*, il.translation
FROM items AS i
INNER JOIN items_localization AS il on i.item_id = il.item_id
WHERE il.locale = ? AND il.translation LIKE "%?%"

替换当前区域设置的值和
的自动完成搜索短语。

您的
项目\u本地化
实际上不应该包含
内容
字段。在每次翻译中都使用它是多余的,而且除非直接看行,否则无论如何都不会使用它。我个人希望有一个地方可以看到我选择的语言中的字符串是什么。我知道这将是一个有点冗余的存储方式,但对我来说,这并不是一个真正的性能问题,因为我永远不会查询该字段。您也许可以通过拥有一个内容表,然后在翻译表中引用该内容id来规范化我的第二个模式选项中提到的内容,但对我来说,将该字段与翻译后的内容并排放在同一个表中更方便。公平地说,我也没有对所有内容进行规范化。但这可能是视图的一个很好的用途(如果SQL server实现了它们)。