添加基于语言的多个URL的开放搜索描述

时间:2016-09-22 12:19:12

标签: opensearchdescription

我想添加OpenSearchDescription的网站在URL路径中有一个语言参数来定义vistors语言。这意味着每种语言的搜索网址都不同,例如http://www.example.org/en/searchhttp://www.example.org/fr/search

以下代码段将允许添加搜索网址,但针对特定语言(例如英语)。

<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
  <script/>
  <ShortName>Example Site</ShortName>
  <Description>Search Example Site</Description>
  <InputEncoding>UTF-8</InputEncoding>
  <Image width="16" height="16" type="image/x-icon">http://www.example.org/favicon.ico</Image>
  <Url type="application/x-suggestions+json" method="GET" template="http://suggestqueries.google.com/complete/search?output=firefox&amp;q={searchTerms}" />
  <Url type="text/html" method="GET" template="http://www.example.org/en/search?search_query={searchTerms}" />
</OpenSearchDescription>

关于添加多语言支持,我不清楚OSD文档。可能是这样吗?

...
  <Url type="text/html" method="GET" template="http://www.example.org/{language}/search?search_query={searchTerms}" />
  <Language>en</Language>
  <Language>fr</Language>
...

1 个答案:

答案 0 :(得分:0)

我正在尝试另一种方法,但是不起作用 参考:https://github.com/dewitt/opensearch/blob/master/opensearch-1-1-draft-6.md#the-language-element

<Url type="text/html" method="GET" language="tr" template="https://example.com/tr/arama?q={searchTerms}"/>
<Url type="text/html" method="GET" language="en" template="https://example.com/en/search?q={searchTerms}"/>

Chrome仅接受最后一个网址;

接受的语言请求标头tr-TR,tr;q=0.9,en-US;q=0.8,en;q=0.7

结果https://example.com/en/search?q=asd,但为什么必须将其作为解决方案。

<Url type="text/html" method="GET" template="https://example.com/{language}/search?q={searchTerms}"/>

这看起来不错。但是我将操作系统默认语言Tr更改为En

结果:https://example.com/en-US/search?q=asd 这出乎意料,我没有此网址,并且无法应用所有语言-国家/地区规范。

用于实际应用的文档不足。

当我研究其他人在这件事上正在做什么时,我注意到没有人在处理它。

最方便的方法是仅使用一个搜索路径,然后用户将302 HTTP代码重定向到其他语言搜索页面以获取浏览器语言(或保存的首选项等:lang cookie)。

这不是问题的答案,但更容易实现。 (等:pinterest) 示例代码:https://stackoverflow.com/a/17826646

替代解决方案解析GET数据并重定向另一个页面:

<Url type="text/html" method="GET" template="https://example.com/search?q={searchTerms}&amp;lang={language}"/>

并处理任何服务器端语言

if lang == "en" OR "en-US" OR en-UK ....
    redirect "https://example.com/en/search?q=" + searchTerms
else if lang == "xx" OR "yy"
    redirect "https://example.com/zz/search?q=" + searchTerms

此方法与http标头读取没什么不同。