Initial implemention of lime.system.Locale
This commit is contained in:
130
lime/system/Locale.hx
Normal file
130
lime/system/Locale.hx
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
package lime.system;
|
||||||
|
|
||||||
|
|
||||||
|
import lime.system.CFFI;
|
||||||
|
|
||||||
|
#if flash
|
||||||
|
import flash.system.Capabilities;
|
||||||
|
#end
|
||||||
|
|
||||||
|
|
||||||
|
abstract Locale(String) from String to String {
|
||||||
|
|
||||||
|
|
||||||
|
public static var currentLocale:Locale;
|
||||||
|
public static var systemLocale (default, null):Locale;
|
||||||
|
|
||||||
|
public var language (get, never):String;
|
||||||
|
public var region (get, never):String;
|
||||||
|
|
||||||
|
|
||||||
|
private static function __init__ ():Void {
|
||||||
|
|
||||||
|
var locale = null;
|
||||||
|
|
||||||
|
#if flash
|
||||||
|
locale = Capabilities.language;
|
||||||
|
#elseif (js && html5)
|
||||||
|
locale = untyped navigator.language;
|
||||||
|
#elseif (lime_cffi && !macro)
|
||||||
|
locale = CFFI.load ("lime", "lime_locale_get_system_locale", 0) ();
|
||||||
|
#end
|
||||||
|
|
||||||
|
if (locale != null) {
|
||||||
|
|
||||||
|
systemLocale = locale;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
systemLocale = "en-US";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
currentLocale = systemLocale;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function new (value:String) {
|
||||||
|
|
||||||
|
this = value;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Get & Set Methods
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private function get_language ():String {
|
||||||
|
|
||||||
|
if (this != null) {
|
||||||
|
|
||||||
|
var index = this.indexOf ("_");
|
||||||
|
|
||||||
|
if (index > -1) {
|
||||||
|
|
||||||
|
return this.substring (0, index);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
index = this.indexOf ("-");
|
||||||
|
|
||||||
|
if (index > -1) {
|
||||||
|
|
||||||
|
return this.substring (0, index);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return this;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private function get_region ():String {
|
||||||
|
|
||||||
|
if (this != null) {
|
||||||
|
|
||||||
|
var underscoreIndex = this.indexOf ("_");
|
||||||
|
var dotIndex = this.indexOf (".");
|
||||||
|
var dashIndex = this.indexOf ("-");
|
||||||
|
|
||||||
|
if (underscoreIndex > -1) {
|
||||||
|
|
||||||
|
if (dotIndex > -1) {
|
||||||
|
|
||||||
|
return this.substring (underscoreIndex + 1, dotIndex);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
return this.substring (underscoreIndex + 1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (dashIndex > -1) {
|
||||||
|
|
||||||
|
if (dotIndex > -1) {
|
||||||
|
|
||||||
|
return this.substring (dashIndex + 1, dotIndex);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
return this.substring (dashIndex + 1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -44,7 +44,6 @@
|
|||||||
<compilerflag value="-Iinclude" />
|
<compilerflag value="-Iinclude" />
|
||||||
|
|
||||||
<file name="src/ExternalInterface.cpp" />
|
<file name="src/ExternalInterface.cpp" />
|
||||||
<file name="src/hx/CFFIExt.cpp" unless="static_link" />
|
|
||||||
|
|
||||||
<section if="LIME_CAIRO">
|
<section if="LIME_CAIRO">
|
||||||
|
|
||||||
@@ -227,6 +226,7 @@
|
|||||||
<file name="src/math/Vector2.cpp" />
|
<file name="src/math/Vector2.cpp" />
|
||||||
<file name="src/system/CFFIPointer.cpp" />
|
<file name="src/system/CFFIPointer.cpp" />
|
||||||
<file name="src/system/JNI.cpp" if="android" />
|
<file name="src/system/JNI.cpp" if="android" />
|
||||||
|
<file name="src/system/Locale.cpp" />
|
||||||
<file name="src/system/SensorEvent.cpp" />
|
<file name="src/system/SensorEvent.cpp" />
|
||||||
<file name="src/ui/DropEvent.cpp" />
|
<file name="src/ui/DropEvent.cpp" />
|
||||||
<file name="src/ui/GamepadEvent.cpp" />
|
<file name="src/ui/GamepadEvent.cpp" />
|
||||||
@@ -238,6 +238,8 @@
|
|||||||
<file name="src/ui/WindowEvent.cpp" />
|
<file name="src/ui/WindowEvent.cpp" />
|
||||||
<file name="src/utils/Bytes.cpp" />
|
<file name="src/utils/Bytes.cpp" />
|
||||||
|
|
||||||
|
<file name="src/hx/CFFIExt.cpp" unless="static_link" />
|
||||||
|
|
||||||
</files>
|
</files>
|
||||||
|
|
||||||
<include name="lib/cairo/files.xml" />
|
<include name="lib/cairo/files.xml" />
|
||||||
|
|||||||
22
project/include/system/Locale.h
Normal file
22
project/include/system/Locale.h
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
#ifndef LIME_SYSTEM_LOCALE_H
|
||||||
|
#define LIME_SYSTEM_LOCALE_H
|
||||||
|
|
||||||
|
|
||||||
|
namespace lime {
|
||||||
|
|
||||||
|
|
||||||
|
class Locale {
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
static char* GetSystemLocale ();
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -24,6 +24,7 @@
|
|||||||
#include <system/CFFIPointer.h>
|
#include <system/CFFIPointer.h>
|
||||||
#include <system/Clipboard.h>
|
#include <system/Clipboard.h>
|
||||||
#include <system/JNI.h>
|
#include <system/JNI.h>
|
||||||
|
#include <system/Locale.h>
|
||||||
#include <system/SensorEvent.h>
|
#include <system/SensorEvent.h>
|
||||||
#include <system/System.h>
|
#include <system/System.h>
|
||||||
#include <text/Font.h>
|
#include <text/Font.h>
|
||||||
@@ -1030,6 +1031,25 @@ namespace lime {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
value lime_locale_get_system_locale () {
|
||||||
|
|
||||||
|
char* locale = Locale::GetSystemLocale ();
|
||||||
|
|
||||||
|
if (!locale) {
|
||||||
|
|
||||||
|
return alloc_null ();
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
value result = alloc_string (locale);
|
||||||
|
free (locale);
|
||||||
|
return result;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
value lime_lzma_compress (value buffer) {
|
value lime_lzma_compress (value buffer) {
|
||||||
|
|
||||||
#ifdef LIME_LZMA
|
#ifdef LIME_LZMA
|
||||||
@@ -1699,6 +1719,7 @@ namespace lime {
|
|||||||
DEFINE_PRIME2 (lime_jpeg_decode_bytes);
|
DEFINE_PRIME2 (lime_jpeg_decode_bytes);
|
||||||
DEFINE_PRIME2 (lime_jpeg_decode_file);
|
DEFINE_PRIME2 (lime_jpeg_decode_file);
|
||||||
DEFINE_PRIME2v (lime_key_event_manager_register);
|
DEFINE_PRIME2v (lime_key_event_manager_register);
|
||||||
|
DEFINE_PRIME0 (lime_locale_get_system_locale);
|
||||||
DEFINE_PRIME1 (lime_lzma_compress);
|
DEFINE_PRIME1 (lime_lzma_compress);
|
||||||
DEFINE_PRIME1 (lime_lzma_decompress);
|
DEFINE_PRIME1 (lime_lzma_decompress);
|
||||||
DEFINE_PRIME2v (lime_mouse_event_manager_register);
|
DEFINE_PRIME2v (lime_mouse_event_manager_register);
|
||||||
|
|||||||
53
project/src/system/Locale.cpp
Normal file
53
project/src/system/Locale.cpp
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
#include <system/Locale.h>
|
||||||
|
|
||||||
|
#if defined(HX_WINDOWS)
|
||||||
|
#include <windows.h>
|
||||||
|
#elif defined(HX_LINUX)
|
||||||
|
#include <clocale>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
namespace lime {
|
||||||
|
|
||||||
|
|
||||||
|
char* Locale::GetSystemLocale () {
|
||||||
|
|
||||||
|
#if defined(HX_WINDOWS)
|
||||||
|
|
||||||
|
char locale[8];
|
||||||
|
int length = GetLocaleInfo (GetSystemDefaultUILanguage (), LOCALE_SISO639LANGNAME, locale, sizeof (locale));
|
||||||
|
char *result = (char*)malloc (length + 1);
|
||||||
|
strcpy (result, locale);
|
||||||
|
return result;
|
||||||
|
|
||||||
|
#elif defined(HX_LINUX)
|
||||||
|
|
||||||
|
const char* locale = getenv ("LANG");
|
||||||
|
|
||||||
|
if (!locale) {
|
||||||
|
|
||||||
|
locale = setlocale (LC_ALL, "");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (locale) {
|
||||||
|
|
||||||
|
char *result = (char*)malloc (sizeof (locale));
|
||||||
|
strcpy (result, locale);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user