【问题标题】:PHP search for form data in different languagesPHP 搜索不同语言的表单数据
【发布时间】:2017-05-16 10:13:04
【问题描述】:

我有一个三种不同语言的表单,并将信息存储在一个数据库中。我有搜索页面,通过选择下拉菜单从数据库中搜索数据。但是当用户搜索时,他只能得到他正在使用的语言的结果。我需要根据用户的选择显示所有语言的结果。我怎样才能实现这个目标?任何想法和帮助表示赞赏。

来自 cmets 的更多详细信息:

这是一个培训师注册和学生搜索培训师的网站。当培训师注册时,他填写表格并从下拉菜单中选择例如部门。网站有 3 个不同语言的版本。当学生搜索培训师时,他选择了一个部门,我想显示与所选部门相关的所有结果,无论培训师注册的语言和用户使用的语言如何。

我有一个如下的数据表

// Table : data
// --------------------------------------------
// username     | name     | sector_id  | lang
// --------------------------------------------
//   jack       |  Jack    | 1      | en
// --------------------------------------------
//   smith      |  Smith   | 1      | fr
// --------------------------------------------

扇区表如下

// Table : sector
// --------------------------------------------
// sector_id | sector_eng| sector_sp    | sector_fr
// --------------------------------------------
//   1       |  Finance  | Financiar    | la finance
// --------------------------------------------

例如,当用户搜索部门 Finance 时,我需要获取 jack 和 smith 的所有数据,但在结果中显示 Smith 的 la Finance 和 Jack 的 Finance

【问题讨论】:

  • 那么数据是如何存储的呢?你使用任何框架吗?你已经尝试过什么?
  • @DestinationN,我不知道该怎么办。首先,我尝试以不同语言在下拉菜单中显示数据,并仅以一种语言存储数据。但在搜索中出现了问题
  • @DestinatioN,以不同语言存储的数据,当用户注册时,他从下拉菜单中选择(例如:Sector->IT)和存储的数据如表格所示。我不使用任何框架
  • 因此,如果您想显示所有结果,根本不考虑查询中的部门
  • @DestinationN,例如,如果用户搜索金融部门,我想以所有语言显示有关金融部门的结果。有很多部门,我想显示用户选择的结果

标签: php forms search


【解决方案1】:

假设您支持 3 种语言(英语、西班牙语、法语),让我们以金融部门为例。无论您为金融部门存储什么数据,都会为相应语言制作这些数据的 3 个版本并存储在您的数据库中。

但是,当您的用户搜索任何数据时 - 仅搜索英文版本的数据。然后,在得到结果(英文版)后,还要获取其他不同版本(这里是西班牙文、法文)的所有相似数据。然后,根据用户的喜好显示各自的版本数据。

希望对你有帮助。

这是根据您在问题中分享的用例的示例表结构。根据我不知道的应用程序复杂性,它可能会有所不同。但是,希望它能给您一些基本的了解以继续前进。

// Table : sector
// ---------------------------------
// sector_id    | sector_name_eng
// ---------------------------------
//  1           | Finance
// ---------------------------------
//  2           | Statistics
// ---------------------------------
//  3           | Biology
// ---------------------------------


// Table : lang_reference
// ------------------------------
// lang_id      | lang_name
// ------------------------------
//  1           | english
// ------------------------------
//  2           | spanish
// ------------------------------
//  3           | french
//  -----------------------------


// Table : sector_lang_details
// --------------------------------------------
// sector_id    | lang_id   | sector_name
// --------------------------------------------
//   1          |  1        | Finance
// --------------------------------------------
//   1          |  2        | Financiar
// --------------------------------------------
//   1          |  3        | Finance_in_french
// --------------------------------------------
//   2          |  1        | Statistics
// --------------------------------------------
//   2          |  2        | Statistics_in_spanish
// --------------------------------------------
//   2          |  3        | Statistics_in_french
// --------------------------------------------
//   3          |  1        | Biology
// --------------------------------------------
//   3          |  2        | Biology_in_spanish
// --------------------------------------------
//   3          |  3        | Biology_in_french
// ---------------------------------------------------



// Table : trainer_details
// --------------------------------
// trainer_id   | trainer_name
// ---------------------------------
//  1           | Tariner A
// ---------------------------------
//  2           | Tariner B
// ---------------------------------
//  3           | Tariner C
// ---------------------------------


// Table : trainer_teches_sectors
// ---------------------------------
// trainer_id   |   sector_id
// ---------------------------------
//  1           |   1
// ---------------------------------
//  1           |   2
// ---------------------------------
//  2           |   1
// ---------------------------------
//  3           |   3
// ---------------------------------

【讨论】:

  • 感谢您的回答。让我更详细地解释我的表格,也许你会有更多相关的解决方案。这是一个培训师注册和学生搜索培训师的网站。当培训师注册时,他填写表格并从下拉菜单中选择例如部门。网站有 3 个不同语言的版本。当学生搜索培训师时,他选择了一个部门,我想显示与所选部门相关的所有结果,无论培训师注册的语言和用户使用的语言如何。
  • 好的。那么,您在实现这一点时面临的问题是什么?
  • 如果它们是完全不同的词,我该如何比较它们?例如,如果用户从下拉列表中选择了 Finance,那么 php 将如何获得 financiar(西班牙语)的结果?
  • 完全不同的词!!!你能举一个例子吗?我对你的要求有点困惑。
  • 例如数据库中有两个trainer。一个注册了英文版并选择了Sector作为Finance。其他培训师注册了西班牙语版本并选择了金融部门。一名学生使用英文版进行搜索并在“部门”下拉菜单中选择“金融”。我需要为金融(金融)部门的所有培训师显示结果,无论他们在注册时使用的语言如何(我的意思是在本例中显示两位培训师)
【解决方案2】:

您可以使用父子结构,这将允许您使用多种语言。

例如 语言在所有系统中都定义为 tow char (ar,en,de,fr..etc)。

所以你的桌子会是这样的

扇区表

id - sector_name       - parent_id - language
1  - Sector in English - null -       en 
2  - Sector in French  - 1    -       fr 
3  - Sector in Spain   - 1    -       sp
  • parent_id 是一个外键,当记录为父记录时为空,当当前记录为子记录时将具有父ID。

你的select语句会是这样的

select * from sector where language="en" and (id=$id or parent_id=$id );

参考

http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

How to create a MySQL hierarchical recursive query

【讨论】:

  • 为什么在西班牙的课程中 parent_id 也是 1?
  • 因为法语和西班牙是从英文原名的翻译版本 - id=1
  • 抱歉,这个问题很愚蠢,但是我将如何提供扇区名称的翻译版本?我的意思是 php 将如何理解西班牙语版本的 Finance 是 Financiar?
  • 按您将其存储在每条记录中的语言参数。 select * from course where language="sp" and (id=$id or parent_id=$id);
  • 您必须通过 cookie 或会话 ..etc 来存储用户语言
猜你喜欢
  • 2018-12-01
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-31
  • 2015-01-23
相关资源
最近更新 更多