我正在尝试使用 Python 日志框架。除了一件事之外,它运作良好。
这个示例代码:
import logging
FORMAT = '%(asctime)-15s %(message)s'
logging.basicConfig(format=FORMAT, level=logging.INFO)
logging.info('test')
Run Code Online (Sandbox Code Playgroud)
产生这个输出:
2014-03-18 11:23:43,082 test
Run Code Online (Sandbox Code Playgroud)
请注意逗号而不是“。” 将秒与毫秒分开。我们在美国,应该有一个地方可以控制这一点。
我可以设置什么以便默认区域设置信息使用句点“.” 对于小数点分隔符?
ISO 3166定义了国家代码,例如GB、US、FR或RU。
我想要从这些国家/地区代码与这些国家/地区之间的地点之间的距离的习惯测量单位之间建立一个相当明确的关联。
特别是在 iOS 和 OS X 上,可以从以下位置检索国家/地区代码NSLocale:
[[NSLocale currentLocale] objectForKey: NSLocaleCountryCode];
Run Code Online (Sandbox Code Playgroud)
NSLocale还提供了一种查看一个国家是否使用公制或非公制单位的方法:
const bool useMetric = [[[NSLocale currentLocale] objectForKey: NSLocaleUsesMetricSystem] boolValue];
Run Code Online (Sandbox Code Playgroud)
然而,这还不够。例如,在英国 ( GB ),公制被广泛使用,但地方之间的距离仍然以英里而不是公里为官方测量单位。
因此,在我的应用程序中,用户看到的第一个活动是选择语言。
假设用户选择法语,然后转到 ActivityB,然后转到 ActivityC。
现在决定更改语言。
因此,返回 ActivityB,然后返回第一个 Activity,并选择语言为西班牙语。
现在,当用户再次转到 ActivityB 时,片段/活动中的所有其他文本都会更改为西班牙语,但 android:label 仍保留法语。如何解决这个问题?
这就是我的 ActivityA 的样子
public View onCreateView(LayoutInflater inflater, ViewGroup container,
final Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_choose_language, container, false);
radioGroup = (RadioGroup) rootView.findViewById(R.id.lang_choice_radio);
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
{
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch(checkedId){
case R.id.english_lang:
// do operations specific to this selection
setLocale("en_US");
Intent intentEng = new Intent(getActivity(), Choose_Country.class);
startActivity(intentEng);
break;
case R.id.indonesian_lang:
// do operations specific to this selection
setLocale("in");
Intent intent = new Intent(getActivity(), …Run Code Online (Sandbox Code Playgroud) 我尝试根据当前位置使用特定语言获取城市,我之前这样做过,如下所示,一切都很好,但在我的新项目中它不起作用!
Geocoder geo = new Geocoder(getApplicationContext(), new Locale("ja"));
List<Address> addresses = null;
try {
addresses = geo.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
if (addresses.size() > 0) {
Log.d("CITY",addresses.get(0).getLocality());
city.setText(addresses.get(0).getLocality());
} else {
// do your stuff
}
} catch (IOException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
无论设置哪种语言,城市名称始终以英语返回!
Locales 的使用顺序到底是什么?我有 3 个属性文件:
Dolphins.properties
name=The Dolphin
age=0
Run Code Online (Sandbox Code Playgroud)
Dolphins_en.properties
name=Dolly
age=4
Run Code Online (Sandbox Code Playgroud)
Dolphins_fr.properties
name=Dolly
Run Code Online (Sandbox Code Playgroud)
我的代码是:
5: Locale fr = new Locale("fr");
6: Locale.setDefault(new Locale("en", "US"));
7: Resource Bundle b = ResourceBundle.getBundle("Dolphins", fr);
8: b.getString("name");
9: b.getString("age");
Run Code Online (Sandbox Code Playgroud)
代码将默认的 Locale 设置为 Dolphins_en 那么为什么它使用 Dolphins.properties 呢?我错过了什么或误解了什么?
提前致谢。
java locale localization resourcebundle internationalization
我正在使用角度日期管道进行日期格式化。我想根据用户/客户端区域设置格式化日期。例如,'mm/dd/yyyy' 表示美国英语(en-US),dd.mm.yyyy 表示德语(de-de)。Angular 有短、中、长等格式选项。它们与语言环境默认格式不匹配。如果我使用自定义日期格式,则没有区域设置分隔符。Intl DateTimeFormat 提供精确的格式化日期。有没有办法用角日期管来实现这一点?
我想存储 Linux 上 setlocale() 函数返回的区域设置名称。与Windows平台一样,最大区域设置大小定义为LOCALE_NAME_MAX_LENGTH,是否有为Linux定义类似的宏?另外,我需要在上述两个平台上使用相同的缓冲区。
char buffer[];
buffer = setlocale(LC_ALL, NULL);
Run Code Online (Sandbox Code Playgroud) Flutter 有一个名为“表日历”的小部件的小部件。我正在尝试使用它,但我需要从设备获取区域设置语言,或者至少可以设置我的语言。在文档中,他们在主文件中编码,但我在另一个文件中,然后我无法重现该示例。
这是我到目前为止所尝试的:
Widget build(BuildContext context) {
return SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TableCalendar(
//locale: "pt_BR",
initialCalendarFormat: CalendarFormat.month,
calendarStyle: CalendarStyle(
todayColor: CustomColors.goldMD,
selectedColor: CustomColors.blackMD,
todayStyle: TextStyle(
fontWeight: FontWeight.bold, fontSize: 18, color: CustomColors.white
......
Run Code Online (Sandbox Code Playgroud)
如果我取消注释“locale”行并运行应用程序,它会抛出此错误:
区域设置数据尚未初始化,请调用initializeDateFormatting()。
所以..我转到该initState方法并写道:
initializeDateFormatting('pt_BR', null);(它接收 2 个参数)
并且误差保持相等。我能做什么来处理这个问题?
我正在根据语言和地区设置区域设置,并希望使用此设置解析 BigDecimal 数字。但我面临的问题是两个 OpenJDK 的分组分隔符不同。
下面是我尝试使用 OpenJDK 8 和 OpenJDK 11 执行的示例代码。
Locale l = new Locale.Builder().setLanguage("de").setRegion("CH").build();
System.out.println("Locale set to " + Locale.getDefault(Locale.Category.FORMAT));
DecimalFormat nf = (DecimalFormat)NumberFormat.getInstance(Locale.getDefault(Locale.Category.FORMAT));
System.out.println("Grouping Separator: " + nf.getDecimalFormatSymbols().getGroupingSeparator());
Run Code Online (Sandbox Code Playgroud)
输出
OpenJDK 8
---------
Locale set to de_CH
Grouping Separator: '
OpenJDK 11
----------
Locale set to de_CH
Grouping Separator: ’
Run Code Online (Sandbox Code Playgroud)
我需要一个通用的解析方法,其中分组分隔符返回相同,以便设计我的单元测试很容易,并且无论是使用 java 8 还是 11 运行它都会通过。请协助。
我在网上爬了很多遍,但没有得到,我搜索的内容甚至不在SO中。所以我认为这是一个新问题:如何将区域设置重置为程序启动时的状态(例如,在 main() 之后首先)?
int
main( int argc, char **argv )
{
// this is start output I like to have finally again
std::cout << 24500 << " (start)\n";
// several modifications ... [e.g. arbitrary source code that cannot be changed]
std::setlocale( LC_ALL, "" );
std::cout << 24500 << " (stage1)\n";
std::locale::global( std::locale( "" ) );
std::cout << 24500 << " (stage2)\n";
std::cout.imbue( std::locale() );
std::cout << 24500 << " (stage3)\n";
std::wcerr.imbue( std::locale() );
std::cout << 24500 << " (stage4)\n";
// …Run Code Online (Sandbox Code Playgroud)