Archived
Fix language detection, never show untranslated strings (fixes #543)
This commit is contained in:
1 parent
f44f5964bb
commit
aa827f3042
3 files changed
+18
-5
No files matched your search
+1
-1
@@ -28,7 +28,7 @@ func init() {
|
||||
bs, _ = ioutil.ReadAll(gr)
|
||||
Assets["angular.min.js"] = bs
|
||||
|
||||
bs, _ = hex.DecodeString("1f8b080000096e8800ffec7dff73db36b2f8effe2b107d72a594c89493f432f789a3f4a56e72cfd734c9c449efcdb8be37940449ac295225293b7e89fff7b7bb00497ca528dbedddcd3c4d1b4bc462b1582c16bb8b05381ab1a36c7d95c78b65c9fa4703f6f8e0d1b7ec6fd1793661df67f98245e90c20d2328f279b32cb0bd62f3867e592b3a3776f3f7e38fefed3c7771f4ed83c4ef820dc03742f938411ba82e5bce0f9059f85ec53c15936876a71c18a6c934f399b6633cee0e722bbe079ca676c72058db19f8e3fee17e555c21157124f795a607351c9a6503ae16c9e6d80a438251ade1c1fbd7a7bf28a9a0ff7f6460f7e2d92382dd924cf2ea1ed67accc377c086da5659c6e78f57b9d6c0afc5ffc660f4650739164932861f79fb17994140014a58b4d12e5f23702ed051bf852002fa66570b8b77711e5acb84aa7d0ad74c1c6558d7095cd3609ef0775593064a7c13a2aa651b2cef9745986651ea54512953c381b1c12a24d9e4c22403f6601f08df0d7f543e8c03c5ef4e71b78106729ebdf5f96e5fa7d9e5dc4339e0fd9fd1a5ff56cc0beec31f86880e18ccfa34d5216e1e7229fff278fe0d9db68458dfed7fed1c987d7fb1fb3739e42e35bea1e65d979ccabba5a4d51d5222804de9d9451194f5fc360156f326cbc2f88c40f30661e7f7ec68204d8b81f0ceb8262331705e1af459606f4fc1a9886ffeb2c2af32c490069f0ea82a7e5519927c0788567c5345bc3c052b76afed0c330898a926a4177d24d920806e0b860c9f10ff0f840768d467d339df2a2789dc2f3a681595446155e05f77dbe8acb7ef0e9f85d0ac2c9838144849f78cefab28517ec40ad8c1f4418ceb3fc55345d2a83cf915013163fc08322839990648b7e8fa07a43467fc378567d2baf9009e23b517c68e1d108b76a1915ae95dfd74ad71c9cc5e64ea953094f17e592edb347674ded9ad56655a05e415cf0f263bce2d9a6547862b28306395cf0b25f4dac872c1811fdc577459c4ef9388047a2c981563594a3dbaf47d928e7799ee57dfa17ca94de0fd99f0f0ee4836b455c24e86ec2329f5bd272fb9e2731a01f3f0aeeaec78f0eac2eef48415beb56cb2db3fea47ada3ef3556d09df936c1a2154c5461c2fd045173f40b198f5d553e8d0bb1fe111ae19cdd334ba881780215dbcbc8cae708871b968ca339af4f67354f2515e8a954396a91a699aadd60927fac7eccbf5a15e86cb81eff9718a9cd0086dca534e3c29eccac4637c7e7aa63d87d58c2736f8ea8aa66a10684f530076e058e759994db3e46809ca1dd67a8d1b1226e7eb2c2f81ed91dd98287b0fc312f34b6f6d47a7c058495f61c76c5237eb450e6bd0713acf1cf560a5aad0b965fa616f842b556f508b6f236f5850a8f3126c99d731982d68b3cce3bc2819826ca205af2c992486876bb156922d840f61c9cc83a2b266546c641181f514c97513adaba8417ac9d932bae02cba88e2249ac092c03e8a1a43d6e3694f4555a06e960dca96d8650c56dc2a2aa74b0267c03ff8bbffe904d693cb25acdfacf73fcbfd8f7fef11a48a4d5402a1bfaa41d0844cb3927e1fbded858d3e13eb6bba188a6a30171ad502cb1eeb23404cb310fe3c27d842ae1df0e4e14353f721008013dc697ca62f54551b00701125f1ec0d6103d3b104eda10c9e6b65cd79b9c953425cad5d2fc6ec31fbe61b968430b2fcf3bb390dfb808d6ba5517dae8d151317fd8a1805db2357c38dae4203aaae767a70e658b727398fce8db6f7f46fd70329cffd4b203bbb1c8413f8db0f261c18ce3769027699a23bb5d5c552758d82b91ee8daeb3e54edd5ba554cfb13314f7aaa6656d157d2800640551326709483f13308b1e4d0b09b90ddc6e2a7b38b400e2d16e8b4a69ccf5e365ab1860ef2550066e70f3c51ac5178388b73f91c56f1381fa8a5b83261216a60f579996da64b2cf8b49ea1d52f8aae4d328ea71e2272be023fc949875d541101c32bc7d34108183e3c8f8bf39a1473f81a83551d305ac5c139ca35d6e370c8850e66c4bd666d33c747cc237544eaafaaf1aa19cbf5d80adae2140c24e571bdc036d2285ab2d7d71a533ff87f292f2fb3fc9c16876080ab5c94f48325a85fad4d806c30b5c315cb4d892c7743b9668862e675e3b13103bf7e65f744f76fc1e7c6ceb4386ab00d2968195b2f57b7ce40e2053a875c1a081dd881da62268c0528214f46a754355f84d38136c29945b51b8c2c002e7d96b0cc3a75e10d68ade418570331cd6fdd0f58db81dfcb0f4051bfa64df50860c5154d31c55e44d23705ada011ace3c226238b01ec826219e55c446210192ce0e53234e71859532a37de220e872b8ab88fe68e694e741fd534558084e8f88721537b5373b66daa7c003557f23f82b9fe4e1014f6c4a6df493376f687b8906677278a410a398ca66db09f561d0067f8cc22125bc20954f4b7d173b4033134e1b790e2994f3e706d71abdb4927ebe2193b185a25e0eafa8a8ed3efaf4a5e7cccca287102bcdb945b205ece66c03c405f5318c1131deefad0ddbd4a28b6f7eebf4b410078ca5ed42d4ae5889c3a8a9739c6cc1c2ecd130cdfad6904c24f1f5e82edb52ed1f51adb7126d022c773f036d07510ae162e9bcb085c0ff09f58ca4147805710553852d02c333ec55562363431818eb98cc0a528331615e7b51f83bf57d139f8246cbacce229b824df6f4823cdb23428a98e890aaa4c360b44b162b34d8e44e1ea1f4709864236e0ca1719e9345e225a8a499242b310011165bc9241e8ca07bb888bb80cd9df973c952166810154e31a63d7364191f4e1081780ad32d2a5518a61e99c2de11ff0c916d910a992bd3771fcb68115144ddb3dad04551591f53352850b4f36ddac30f825a84265934453de1ff5bf7b06fffde36bf8e0f097e2c1a0a904bf7e19c33ffdd37f1c9e3d18840fee0fbefe03fe1d81d377ff51cfe185dc6b2abb9c0f830420aad75418f7d843865112d0889760c83f64bdc355f4791f84888a9e1c3c78fced83274f0f4c6f88718ca73bb40010f45061c17315fb3e13b81e50bcc9ae8c1f3440364eb3a36ebb936f44ab069f6430d3f8ec35fcab4502ea09a8ae1fb412180bcf39471fa9a780215b10d230a9f4b64ea19ea5551d202822f2694b3490f8e28cc791c5f31d924391509ee28ecca70fc7b8de65298cbae8942bbe61c62eb5c6547b8a8c076944d9a3811f2d64adb26a489c120bad6b24cd28b488440ec90bb00c4e0f0bebc5d23db22757e023ad3496ba59591060d095557a048dd60efcee5c68046a270b5dac1324f72cb65db7f7d430d404ef2de70377ecc6e3b14abfdbef70b91df68c681ac57941d8ff85a647b3c27f87a4d11c913406dfdcf9acd12daddab6c006adce3aa4c4aca20434cdcf75dbac35f1681358293ddc7362c13106630703764336a52d9f03371575746fba5a6308f4065d4796616d94c89eb0b17a6df0f8a93682dd44f9d9831fecd8c3b197Line truncated
|
||||
bs, _ = hex.DecodeString("1f8b080000096e8800ffec7dff73db36b2f8effe2b107d729594c89493f432f789a3f4a56e72cfd734c9c449efcdb8be37940449ac2952e5173b7e89fff7b7bb00497ca528dbedddcd3c4d1b4bc462b1582c16bb8b05381eb3a374739545cb55c1064743f6f8e0d1b7ec6fe1793a65dfa7d99285c91c2092228ba6659166391be49cb362c5d9d1bbb71f3f1c7fffe9e3bb0f276c11c57c18ec01ba9771cc085dce329ef3ec82cf03f629e72c5d40b52867795a6633ce66e99c33f8b94c2f7896f0399b5e4163eca7e38ffb79711573c41547339ee4d85c58b019944e395ba42590142544c39be3a3576f4f5e51f3c1dedef8c1af791c25059b66e925b4fd8c1559c947d056524449c9abdf9bb8ccf17ff19b3d1843cd659c4ec398dd7fc616619c0350982ccb38cce46f04daeb97f025075ecc8afee1dede4598b1fc2a9941b792259b543582753a2f633ee8d765fd113bed6fc27c16c69b8ccf564550646192c761c1fb67c343425466f13404f413d607be11feba7e001d5844cbc1a28407519ab0c1fd55516cde67e94534e7d988ddaff155cf86eccb1e838f0618ccf9222ce3220f3ee7d9e23f7908cfde866b6af4bff68f4e3ebcdeff989ef3041adf52f7284dcf235ed5d56a8aaa164101f0eea4088b68f61a062b7f9362e30341247e80318be8f333d68f818dfbfd515d90970b5110fc9aa7499f9e5f03d3f07f9d454596c63120edbfbae04971546431305ee1593e4b3730b0d4ad9a3ff43088c3bca05ad09da48c63c1001c172c39fe011e1fc8aed1a897b319cff3d7093c6f1a98874558e15570dfe7eba818f43f1dbf4b4038797f2811e1275ab0816ce1053b502be30711068b347b15ce56cae07324d484c50ff0204f6126c4e972d023a8de88d1df209a57df8a2b6482f84e141f5a7834c2ad5a46856be5f7b5d2350767b1b953ea54cc9365b162fbecd15953bb66b55915a85710e7bcf818ad795a160a4f4c76d020074b5e0caa89f590f5c7447ffe5d1e25333ee9c323d1e450ab1ac8d11dd4a36c94f32c4bb301fd0b654aef47eccf0707f2c1b5222e12743761592c2c69b97dcfe308d04f1ef5efaec78f0eac2eef48415beb56cb2db3fea47ada3ef3556d09dfe374162254c5461c2fd045173f40b198f5d553e8d0bb1fe111ae19cdd324bc8896802159bebc0caf708871b968ca539af4f67354f2615688954396a91a6996ae373127fa27eccbf5a15e86cb81eff971829cd0086dca134e3cc9edcac4637c7e7aa63d87d58cc736f8fa8aa66abfaf3d4d00d8816393a5453a4be3a315287758eb356e48988c6fd2ac00b6877663a2ec3d0c4bc42fbdb51d9d02632579851db3492d37cb0cd6a0e364913aeac14a55a173cbf4c3de1857aadeb016df46deb02057e725d832af23305bd0665944595e300429c325af2c993882871bb156922d840f61c9ccfa7965cda8d8c82202eb2994eb265a576183f492b35578c15978114671388525817d143546acc7939e8a2a47dd2c1b942db1cb08acb87558cc5604ce807ff077ffd309ac27972b58bf59ef7f56fb1fffde2348159ba804427f5583a00999a405fd3e7adb0b1a7d26d6d7643912d5602e34aa05963d364080886621fc794eb0b95c3be0c9c387a6ee43000027b8d3e84c5fa8c45a0b4a432e3ecfd963cf224ac6a2b1ca69bf2a72a1ad8b308ee66f8830b0420b50448d1c8048e611701f8b5d4d01bf3ee2d8636d5008455919c2381663d41063510686632c06654a1213a7978a3c28e866209901fb3b9ad7eb4d9881e99c0af1c20a58c8c0dace913832c7792d324e6468a2d7a294c3d7380e2c40b593c00ff56750a46fb0e123687830b46ae28068e072605e3065985c7cc38f6097de1c4c31fef9dd824679c826b5f6d606927134e75b91c62a327d103d48bd1651d5cf4a62ea3e4ed82357d79ab5090de6badae9c199c34e13e4fa04f55a533f2041d370768ec4c06424e125e47cbee7691b677eb5b20fa5161c5c025bd2cb613085bf83fe94c334e565128335afacb89a4d622d90cdb2743dd4d7bcfb50b557afc862b13811dab5a7aee72afa4a87a0d958d504b51f6660320f032c3934ac6d7b2e1a1d279043838f26ad09e7f397cd5a5a43f7b3751f9c951f78acf830f0701e65f239d87e5136544bd19ec1425cb7d5e7455ace5658f06933475f51145d9b641ccf3c44647c0ddeb5930ebba8220286578ea7831030977916e5e73529e6f0356e8e3a6064fb814b9d69acc7e190e6d137dfb07b8d45648e8f29e7d7cd12a2ba3c9a8b558fada02d4ac0ac561ed76659238da225db2aab310dfaff2fe1c5659a9d9349d11fa26d14c683fe0a166dad4d806c30b5c3e5abb24096bba15c3344710ebaf1d898815fbfb27ba2fbb7e073e39d581c35d88614b48cad97ab5b6720f102430a5c9a951dd881da622e4c4c2821ff57a754357a85ab8a96e59945b51b8cec462e3d5d58fd3a75e10d68adf818571b31cd6fdd0fb00881dfab0f40d1a0a64df523613d104d31c5cb40d2cb9cec2eb43684254f76269800f98a8c098cdf2132b0458a5560ce31b2c1556ebc451c8e0006e23e5a38a639d17d54d3540112a2e31f464ced4dcdd9b6a9f201d45cc1ff08e6fa3b4150d8139b7e27cdd8d91fa25c3a6b9d280629e4309ab69b775a752088e6671691d8124ea07cb08d9ea31d88a109bf8514cf7cf2816b8b5bdd4e32dde4cfd8c1c82a49cbc257749c7c7f55f0fc635a84b113e05d596c8178399f03f3007d4d61084f74b8eb4377f72aa1d8debbff2e04018f0e0ebca85b94ca11850228caea183373b8b4f841f06e4323107cfaf0126caf4d810efbc48e4e8216395e808f8a0ea770d071d95c81a33005af9b251c7404f89261852301cd32e7335c25e6231313e898cb101c51f057c2fcbcf67ef1f73a3c07f783cd56693403e7e6fb9234d23c4dfa05d53151419569b944146b362f33240a57ff288c3180566e462c4f49a7f102d152249b149a85088828a235af7c25e1b95f447954808fb5e289dc98101840356e70c7c32628949e3fe102b0754aba344c703323632bf8073cf9653a42aa64ef4d1cbf95b082a269bba795a0aa22b27e46aa70e14967e51a43a6822a54367138e383f1e0bb67f0df3fbe060f0e7fc91f0c9b4af0eb9709fc3338fdc7e1d98361f0e0fef0eb3fe0dff188f5ee3fea397c997b4d65970b63900044f59a0a931e7bc830b6061af1120cf987ac77b80e3fef831051d19383078fbf7df0e4e981e16579dd3624e8a1c282e72af67d26703da028a5dbe74303a4749a1d75dbad0e56e51bd1aac1a729cc343e7f0dff6af1a37a02aaeb07ad04c6c273ced147ea2960c81684344c2abdad53a867695507088a887cda124326be38a3b864f17c87e450fc9c271824f8f4e118d7bb348151179d7245c5cc88b7d6986a4f91f1208d287b34f0a36d74a8ac1a11a7c442eb1a4973ef42c4af47e4055806a78785f562e91ed9932bf091d61a4bddaccc09b0Line truncated
|
||||
gr, _ = gzip.NewReader(bytes.NewBuffer(bs))
|
||||
bs, _ = ioutil.ReadAll(gr)
|
||||
Assets["app.js"] = bs
|
||||
|
||||
@@ -517,7 +517,7 @@ func restGetLang(w http.ResponseWriter, r *http.Request) {
|
||||
var langs []string
|
||||
for _, l := range strings.Split(lang, ",") {
|
||||
parts := strings.SplitN(l, ";", 2)
|
||||
langs = append(langs, strings.TrimSpace(parts[0]))
|
||||
langs = append(langs, strings.ToLower(strings.TrimSpace(parts[0])))
|
||||
}
|
||||
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
||||
json.NewEncoder(w).Encode(langs)
|
||||
|
||||
+16
-3
@@ -91,14 +91,27 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http, $translate, $loca
|
||||
var lang, matching;
|
||||
for (var i = 0; i < langs.length; i++) {
|
||||
lang = langs[i];
|
||||
matching = validLangs.filter(function (l) {
|
||||
return lang.length >= 2 && l.indexOf(lang) == 0;
|
||||
if (lang.length < 2) {
|
||||
continue;
|
||||
}
|
||||
matching = validLangs.filter(function (possibleLang) {
|
||||
// The langs returned by the /rest/langs call will be in lower
|
||||
// case. We compare to the lowercase version of the language
|
||||
// code we have as well.
|
||||
possibleLang = possibleLang.toLowerCase()
|
||||
if (possibleLang.length > lang.length) {
|
||||
return possibleLang.indexOf(lang) == 0;
|
||||
} else {
|
||||
return lang.indexOf(possibleLang) == 0;
|
||||
}
|
||||
});
|
||||
if (matching.length >= 1) {
|
||||
$translate.use(matching[0]);
|
||||
break;
|
||||
return;
|
||||
}
|
||||
}
|
||||
// Fallback if nothing matched
|
||||
$translate.use("en");
|
||||
})
|
||||
|
||||
$(window).bind('beforeunload', function() {
|
||||
|
||||
Reference in new issue
Block a user