aboutsummaryrefslogtreecommitdiffstats
path: root/include/language.php
diff options
context:
space:
mode:
authorRedMatrix <info@friendica.com>2014-12-31 10:21:53 +1100
committerRedMatrix <info@friendica.com>2014-12-31 10:21:53 +1100
commit7b0b0dd76f97118e5cae64c2d444d9343da7074c (patch)
tree895de27ff85b372fd9bbb5f829942e329001a7ef /include/language.php
parent4a82967639e662821de177e3bd829b735b4eb24e (diff)
parentb54bbf0fb8af72bd5273597f564f084aa1c1ac79 (diff)
downloadvolse-hubzilla-7b0b0dd76f97118e5cae64c2d444d9343da7074c.tar.gz
volse-hubzilla-7b0b0dd76f97118e5cae64c2d444d9343da7074c.tar.bz2
volse-hubzilla-7b0b0dd76f97118e5cae64c2d444d9343da7074c.zip
Merge pull request #794 from pafcu/lang
Language names via intl library.
Diffstat (limited to 'include/language.php')
-rw-r--r--include/language.php30
1 files changed, 24 insertions, 6 deletions
diff --git a/include/language.php b/include/language.php
index 9db57dceb..f5ee3471e 100644
--- a/include/language.php
+++ b/include/language.php
@@ -250,8 +250,7 @@ function detect_language($s) {
* By default we use the localized language name. You can switch the result
* to any language with the optional 2nd parameter $l.
*
- * $s and $l can be in any format that PHP's Locale understands. We will mostly
- * use the 2-letter ISO 639-1 (en, de, fr) format.
+ * $s and $l should be in 2-letter ISO 639-1 format
*
* If nothing could be looked up it returns $s.
*
@@ -259,11 +258,30 @@ function detect_language($s) {
* @param $l (optional) In which language to return the name
* @return string with the language name, or $s if unrecognized
*/
+require_once(__DIR__ . '/../library/intl/vendor/autoload.php');
+use CommerceGuys\Intl\Language\LanguageRepository;
function get_language_name($s, $l = null) {
- if($l === null)
- $l = $s;
+ // get() expects the second part to be in upper case
+ if(strpos($s,'-') !== false) $s = substr($s,0,2) . strtoupper(substr($s,2));
+ if($l !== null && strpos($l,'-') !== false) $l = substr($l,0,2) . strtoupper(substr($l,2));
- logger('get_language_name: for ' . $s . ' in ' . $l . ' returns: ' . Locale::getDisplayLanguage($s, $l), LOGGER_DEBUG);
- return Locale::getDisplayLanguage($s, $l);
+ $languageRepository = new LanguageRepository;
+
+ // Sometimes intl doesn't like the second part at all ...
+ try {
+ $language = $languageRepository->get($s, $l);
+ }
+ catch(CommerceGuys\Intl\Exception\UnknownLanguageException $e) {
+ $s = substr($s,0,2);
+ if($l !== null) $l = substr($s,0,2);
+ try {
+ $language = $languageRepository->get($s, $l);
+ }
+ catch(CommerceGuys\Intl\Exception\UnknownLanguageException $e) {
+ return $s; // Give up
+ }
+ }
+
+ return $language->getName();
}