Thread (11 messages) flat view 11 messages, 4 authors, 2016-06-15

Re: [PATCH] http: Add Accept-Language header if possible

From: Yi, EungJun <hidden>
Date: 2016-06-15 23:01:52

2014-07-09 19:40 GMT+09:00 Peter Krefting [off-list ref]:
Yi EungJun:

quoted
Example:
 LANGUAGE= -> ""
 LANGUAGE=ko -> "Accept-Language: ko; q=1.000, *; q=0.001"
 LANGUAGE=ko:en -> "Accept-Language: ko; q=1.000, en; q=0.999, *; q=0.001"

Avoid adding "q=1.000". It is redundant (the default for any unqualified
language names is 1.0, and additionally there has historically been some
buggy servers that failed if it was included.
Ok, I'll fix it.
quoted
+       p1 = getenv("LANGUAGE");

You need a fallback mechanism here to parse all the possible language
variables. I would use the first one I find of these:

 1. LANGUAGE
 2. LC_ALL
 3. LC_MESSAGES
 4. LANG

Only "LANGUAGE" holds a colon-separated list, but the same code can parse
all of them, just yielding a single entry for the others.
I'll use setlocale(LC_MESSAGES, NULL) as well as getenv("LANGUAGE").
quoted
+                               strbuf_add(buf, p1, p2 - p1);

The tokens are on the form language_COUNTRY.encoding@identifier, whereas
Accept-Language wants language-COUNTRY, so you need to a) replace "_" with
"-", and b) chop off anything following a "." or "@".

quoted
+                               strbuf_addf(buf, "; q=%.3f", q);
+                               q -= 0.001;

Three decimals seems a bit overkill, but some experimentation might be
necessary.
I'll use three decimals only if there are 100 or more preferred languages.
quoted
+               strbuf_addstr(buf, "*; q=0.001\r\n");

You should probably also add an explicit "en" here, if none was already
included. I've seen some servers break horribly if "en" isn't included.
I'll send Accept-Language only if there is at least one preferred
language. Is it enough?

Thanks for your review.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help