一个常见的国际问题是字符串中表示的双值的转换.这个东西在很多地方都有发现.
从调用的csv文件开始
comma separated
Run Code Online (Sandbox Code Playgroud)
要么
character separated
Run Code Online (Sandbox Code Playgroud)
因为有时它们会被存储起来
1.2,3.4
5.6,6.4
Run Code Online (Sandbox Code Playgroud)
在英语地区或
1,2;3,4
5,6;6,4
Run Code Online (Sandbox Code Playgroud)
例如德国地区.
从这个背景来看,有必要知道大多数std ::方法都依赖于语言环境.因此在德国,他们会将"1,2"读作1.2并将其写回"1,2",但使用英语操作系统时,它将"1,2"读为1并将其写回为"1".
由于语言环境是应用程序的全局状态,因此将其切换到其他设置并不是一个好主意.当我必须在英语机器上读取德语CSV文件或反之亦然时,我们遇到了一些问题.
在所有机器上编写行为相同的代码也很困难.C++流允许每个流的区域设置.
class Punctation : public numpunct<wchar_t>
{
public:
typedef wchar_t char_type;
typedef std::wstring string_type;
explicit Punctation(const wchar_t& decimalPoint, std::size_t r = 0) :
decimalPoint_(decimalPoint), numpunct<wchar_t>(r)
{
}
Punctation(const Punctation& rhs) :
decimalPoint_(rhs.decimalPoint_)
{
}
protected:
virtual ~Punctation()
{
};
virtual wchar_t do_decimal_point() const
{
return decimalPoint_;
}
private:
Punctation& operator=(const Punctation& rhs);
const wchar_t decimalPoint_;
};
...
std::locale newloc(std::locale::classic(), new Punctation(L','));
stream.imbue(newloc);
Run Code Online (Sandbox Code Playgroud)
将允许您使用std …
使用带有C++的ICU库我正在做:
char const *lang = Locale::getDefault().getLanguage();
Run Code Online (Sandbox Code Playgroud)
如果我编写一个小测试程序并在我的Mac系统上运行它,我就可以en
了lang
.但是,在我正在进行的一个更大的团队项目中,我得到了root
.有谁知道为什么?我确实发现了这个:
http://userguide.icu-project.org/locale/resources
所以我的猜测是,当在较大的系统下运行时,一些ICU资源没有找到,但我不知道什么资源,为什么没有找到它们,或者如何解决它.
/usr/bin/locale
收益:
LANG="en_US.ISO8859-1"
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL="C"
Run Code Online (Sandbox Code Playgroud)
如果我写一个小C程序:
char const *lang = setlocale( LC_ALL, "" ):
Run Code Online (Sandbox Code Playgroud)
我得到en_US.ISO8859-1
.
操作系统:Mac OS X 10.6.4(Snow Leopard)
ICU版本:4.3.4(最新版本可通过MacPorts获得).
一点帮助?谢谢.
德尔福xe.
对于Tab Administrative
- Unicode lang
使用GetSystemDefaultLangID
对于Tab Formats
-
使用GetUserDefaultLangID
但是我对For Tab使用了Location
什么?
对于
Vista及更高版本的"键盘和语言"选项卡:带有键LOCALE_CUSTOM_UI_DEFAULT的Getlocaleinfo
Function GetLocaleInformation(flag: integer): string;
var
pclca: array[0..20] of char;
begin
if (GetLocaleInfo(
//locale_system_default - Always identical values returns
LOCALE_CUSTOM_UI_DEFAULT // work only Vista-Win7, not Xp **
,flag,pclca,19) <= 0 ) then begin
pclca[0] := #0;
end;
Result := pclca;
end;
Run Code Online (Sandbox Code Playgroud)
我们是一个位于比利时的网站.我们将'locale = nl_BE'参数添加到我们的iframe按钮中,所以它用但是用荷兰语(="vind ik leuk")表示.
这不再有效.当我们将语言环境更改为nl_NL(也是荷兰语)时,like按钮再次起作用.
当我检查Facebook国际化文档时,我似乎无法找到比利时或nl_BE,奇怪吧?这工作了几个月,直到yeaserday.http://www.facebook.com/translations/FacebookLocales.xml
jsFiddle:http://jsfiddle.net/Jeroenvdb/cw6js/1/
nl_NL(工作):https://www.facebook.com/plugins/like.php? href = http%3A%2F%2Fwww.hln.be%3Futm_source%3Dfacebook%26utm_medium%3Dweb&locale = nn_NL&send = false &layout = box_count&width = 0& show_faces =假动作=像&色彩方案=光&字体&高度= 85
nl_BE(不工作):https://www.facebook.com/plugins/like.php? href = http%3A%2F%2Fwww.hln.be%3Futm_source%3Dfacebook%26utm_medium%3Dweb&locale = int_BE&send = false &layout = box_count&width = 0&show_faces =假动作=像&色彩方案=光&字体&高度= 85
所以在我的应用程序中,我试图让设备目前设置语言及其首字母缩略词.所以我这样做:
NSString *fullLanguage = [[NSLocale currentLocale] displayNameForKey:NSLocaleIdentifier value:[[NSLocale preferredLanguages] objectAtIndex:0]];
NSString *abrlanguage = [[NSLocale preferredLanguages] objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)
但是有些用户报告说语言正在返回类似:en_UK或类似的内容,这反过来又搞乱了我的应用程序的功能.
无论如何,有没有办法获得设备的当前设置语言,无论设备区域设置如何?
谢谢!
我需要从Java日期中仅提取月份和年份信息以显示在GUI中.必须使用用户区域设置翻译此日期.我知道两种格式化本地化日期的方法:
DateFormat.getInstance(DateFormat.LONG, locale).format(date)
new SimpleDateFormat("yyyy M", locale).format(date)
对于区域设置SIMPLIFIED_CHINESE
和日期2013-02-18
,这给出:
我们需要使用LONG
没有日期的格式(2013年2月).[变体2显然是不可接受的,因为年月的排序不受区域设置的影响].问题可能是:如何从长格式中删除日期部分(18日)?我尝试使用该方法format(Date date, StringBuffer toAppendTo, FieldPosition pos)
,但这只允许提取数字部分,而不是额外的字符.
模式DateFormat.getInstance(DateFormat.LONG, Locale.SIMPLIFIED_CHINESE)
是yyyy'?'M'?'d'?'
.提取日期部分会产生yyyy'?'M'?'
.在我看来,不可能使用Java的DateFormat标准来实现这一点,因为额外的字符(?
,?
和?
)似乎没有映射到相应的字段,而只是格式化器没有其他语义的字符.
我一看DateFormatSymbols
和LocaleServiceProvider
,但认为这并不能帮助.对我来说,扩展点将是为getInstance(int style)
方法添加另一种日期样式.但是如果没有为所有Locale实现它,它似乎是不可能的......
这个分析是否正确?如何以干净的方式实现这种格式化?
我想打印所有可用语言的分类波兰语名称.
import java.util.*;
public class Tmp
{
public static void main(String... args)
{
Locale.setDefault(new Locale("pl","PL"));
Locale[] locales = Locale.getAvailableLocales();
ArrayList<String> langs = new ArrayList<String>();
for(Locale loc: locales) {
String lng = loc.getDisplayLanguage();
if(!lng.trim().equals("") && ! langs.contains(lng)){
langs.add(lng);
}
}
Collections.sort(langs);
for(String str: langs){
System.out.println(str);
}
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是我对排序部分有疑问.输出是:
:
:
katalo?ski
korea?ski
litewski
macedo?ski
:
:
w?gierski
w?oski
?otewski
Run Code Online (Sandbox Code Playgroud)
不幸的是在波兰?
之后来到l
之前m
所以输出应该是:
:
:
katalo?ski
korea?ski
litewski
?otewski
macedo?ski
:
:
w?gierski
w?oski
Run Code Online (Sandbox Code Playgroud)
我怎么能做到这一点?是否存在一种通用的非语言相关方法(比如说我现在想要显示它并使用另一种排序规则在另一种语言中排序).
这是我的代码:
/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.text.SimpleDateFormat;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
SimpleDateFormat date = new SimpleDateFormat("dd-MMM-yyyy", new Locale("es","ar"));
System.out.println(date.format(new Date(2014-1900,0,1)));
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码返回,
01-ene-2014
Run Code Online (Sandbox Code Playgroud)
但是,月份应该是句子,即Ene
任何人都可以帮助我如何01-Ene-2014
不使用子串?
所以我一直在尝试设置Python语言环境.我想,因为我想以当地语言(使用strftime('%A')
)使用工作日名称.但是目前工作日是用英语打印的,尽管我尝试过多种方式设置语言环境.我在带有Ubuntu Mate的RPi2上运行它.
我已经尝试过本主题中的解决方案在Windows上设置Python的语言环境的正确方法是什么?
我尝试将locale明确设置为nl_NL.utf8
:
$> locale -a
$> python3
>>> import locale
>>> locale.setlocale(locale.LC_ALL,'nl_NL.utf-8')
Run Code Online (Sandbox Code Playgroud)
我也尝试设置一个空字符串,在最后一个答案中建议:
>>> locale.setlocale(locale.LC_ALL, '')
Run Code Online (Sandbox Code Playgroud)
在我尝试的两种情况下
>>> locale.getlocale()
Run Code Online (Sandbox Code Playgroud)
我知道了 nl_NL.utf8
但我仍然用英语获得工作日!除了上面的主题外,还没有在internetz上找到太多这方面的内容,我无法解决这个问题.
编辑:
我尝试了所有3个选项.第一个返回一个奇怪的结果:
~/Documenten$ python3
Python 3.4.3+ (default, Oct 14 2015, 16:03:50)
[GCC 5.2.1 20151010] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> locale.getlocale(locale.LC_TIME)
(None, None)
>>> locale.setlocale(locale.LC_TIME, 'nl_NL.utf-8')
'nl_NL.utf-8'
>>> locale.getlocale(locale.LC_TIME)
('nl_NL', 'UTF-8')
>>> exit()
jeffrey@jeffrey-desktop:~/Documenten$ python3
Python 3.4.3+ (default, Oct 14 2015, 16:03:50) …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个应用程序,该应用程序根据用户的配置显示数字。一切正常,除非我在Chrome中尝试使用小于10000的数字,并且使用以下语言环境:“ es-AR”。有任何想法吗?
铬:
Firefox:
console.log( (10000).toLocaleString("es-AR") );
console.log( (9999).toLocaleString("es-AR") );
console.log( (9999).toLocaleString("en-US") );
Run Code Online (Sandbox Code Playgroud)