# HG changeset patch # User Sascha L. Teichmann # Date 1254477735 0 # Node ID 0b04fa8a19c681f0efd4c98cf6de352489fea208 # Parent 823850c63d956113d223aef69e20420f173aa77a Better implementation for fetching the preferred locale via meta of call context. artifacts/trunk@176 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 823850c63d95 -r 0b04fa8a19c6 Changelog --- a/Changelog Fri Oct 02 09:44:58 2009 +0000 +++ b/Changelog Fri Oct 02 10:02:15 2009 +0000 @@ -1,3 +1,8 @@ +2009-10-02 Sascha L. Teichmann + + * artifact-database/src/main/java/de/intevation/artifactdatabase/DefaultCallMeta.java: + Better implementation for fetching the preferred locale. + 2009-10-02 Sascha L. Teichmann * artifacts/src/main/java/de/intevation/artifacts/CallMeta.java: diff -r 823850c63d95 -r 0b04fa8a19c6 artifact-database/src/main/java/de/intevation/artifactdatabase/DefaultCallMeta.java --- a/artifact-database/src/main/java/de/intevation/artifactdatabase/DefaultCallMeta.java Fri Oct 02 09:44:58 2009 +0000 +++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/DefaultCallMeta.java Fri Oct 02 10:02:15 2009 +0000 @@ -28,7 +28,31 @@ return null; } - return locales[0]; + Locale best = null; + float quality = -Float.MAX_VALUE; + + for (int i = 0; i < locales.length; ++i) { + Locale wish = locales[i]; + String wishLanguage = wish.getLanguage(); + + for (int j = 0; j < languages.length; ++j) { + PreferredLocale have = languages[j]; + Locale haveLocale = have.getLocale(); + if (haveLocale.getLanguage().equals(wishLanguage)) { + float haveQuality = have.getQuality(); + if (haveQuality > quality) { + quality = haveQuality; + best = wish; + } + break; // Languages should not contain + // same locale twice. + } + } + } + + return best == null + ? locales[0] + : best; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8: