3

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

下面的代码片段将允许添加搜索 URL,但要使用特定的语言(例如英语)。

<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>
...
4

1 回答 1

2

我正在尝试另一种方式,但不工作参考: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 只接受最后一个 url;

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

结果https://example.com/en/search?q=asd但是为什么 /en 它必须是一个解决方案。

<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 cookies)。

这不是问题的答案,但更容易实现。(等: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 标头没有什么不同。

于 2018-07-09T17:02:42.327 回答