在模板中,我显示特定日期的日期和月份:
<div class="jour"><?php echo date('d',strtotime($content->getCreatedAt())) ?></div>
<div class="mois"><?php echo date('M',strtotime($content->getCreatedAt())) ?></div>
Run Code Online (Sandbox Code Playgroud)
这个工作正常,问题是月份名称是英文的.我在哪里指定我想要另一个语言环境中的月份名称,例如法语?
我在一个云平台上工作,服务器是Apache。
在其中一个站点实例中,php 脚本 setlocale(LC_ALL, "en_GB.utf8"); 总是返回 false。
当我执行 locale -a 时,可以在平台中找到此语言环境“en_GB.utf8”。还注意到,setlocale(LC_ALL, 0); 返回“C”。
这里 PHP/Apache 似乎不知道底层平台区域设置。有人能建议我万一可能出什么问题吗?
我正在研究跨平台的C ++应用程序。它是多语言的,必须以usera语言显示所有消息。为了检测语言环境,我正在使用setlocale(LC_ALL,“”)调用。它返回当前的语言和国家/地区,例如我的情况是“ ru_RU.UTF-8”。
当我从终端启动应用程序时,一切都可以在MacOS 10.9.1中正常工作。当我从Finder运行我的应用程序时,setlocale总是返回默认语言环境(“ C”)。我怀疑这是因为Finder未设置LANG环境变量。
在C ++应用程序中的MacOS X下检测用户语言环境的正确方法是什么?
我们目前面临的问题是,在使用Windows文件打开/保存对话框时加载了一个外部组件(我们遗憾地不知道哪一个),有些系统可能会通过调用来更改进程的语言环境setlocale(LC_ALL, "").
这会混淆我们的应用程序,因为它依赖于所设置的标准语言环境(在运行时期间我们自己的任何组件都不会更改).
因此,我们需要确保setlocale()在进程内调用时从未产生任何影响,或者我们需要在调用此函数时检测,然后将语言环境重置为默认的"C"语言环境.
有没有办法实现这些目标?
在我的 Laravel 应用程序中,我想以荷兰语格式显示日期。在我的 config/app.php 文件中,我设置了时区和语言环境:
'timezone' => 'Europe/Amsterdam',
'locale' => 'nl',
Run Code Online (Sandbox Code Playgroud)
但是如果我在我的刀片文件中打印一个日期,如下所示:
strftime('%a %e %b', strtotime($day->date))
Run Code Online (Sandbox Code Playgroud)
它仍然没有以荷兰语格式显示。当我在相关控制器的构造函数中调用 setlocale() 方法时,它会起作用。
setlocale(LC_TIME, 'NL_nl');
Run Code Online (Sandbox Code Playgroud)
如何全局设置或在我的配置中定义它?
对于嵌入式软件项目,我添加了对翻译的支持,并且由于我们正在运行嵌入式Linux,因此我选择使用libc gettext()。我们没有安装任何语言环境定义,因此我仅尝试将LC_MESSAGES语言环境设置为所需的语言环境:
setlocale(LC_MESSAGES, "fake");
Run Code Online (Sandbox Code Playgroud)
(在使用正确的翻译之前,我正在使用名称fake和fake.mo文件进行伪翻译)。
静态链接时此方法工作正常,它返回一个语言环境句柄,bindtextdomain()并且所有朋友都可以正常工作,而我从中获得了“翻译”字符串:
setlocale() returned "fake"
current textdomain is "ewe"
current base directory is "/opt/btech/probe/share/locale/WA"
current LC_MESSAGES locale is "fake"
gettext("Error") ==> "?????"
Run Code Online (Sandbox Code Playgroud)
现在,当我动态编译它时,它不起作用。既不在目标设备上,也不在本地PC上(文件安装方式相同)。该setlocale()调用失败,返回一个NULL指针,并设置errno为ENOENT(找不到文件)。到目前为止,setlocale()我还没有指出bindtextdomain()文件的位置,但是切换调用无济于事。
我做错事了吗,我的工作示例是错误的,真的不应该工作吗?我是否需要语言环境什么我打电话的定义setlocale()上,即使是LC_MESSAGES?
这是测试二进制文件的来源:
#include <libintl.h>
#include <locale.h>
#include <stdio.h>
int main()
{
const char *l = setlocale(LC_MESSAGES, "fake");
printf("setlocale() returned \"%s\"\n", l);
bind_textdomain_codeset("ewe", "UTF-8");
bindtextdomain("ewe", "/opt/btech/probe/share/locale/WA");
textdomain("ewe");
printf("current textdomain is \"%s\"\n", …Run Code Online (Sandbox Code Playgroud) 在我的计算机(MacOS 10.14.x)上编译并运行以下代码会导致在clang ++上打印空字符串,并在g ++上引发运行时错误。为什么?
#include <locale>
#include <iostream>
int main()
{
std::cout << "User-preferred locale setting is " <<
std::locale("").name().c_str() << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
$ clang++ locale.cc
$ ./a.out
User-preferred locale setting is
$ g++-mp-8 locale.cc
$ ./a.out
terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid
User-preferred locale setting is Abort trap: 6
$ clang++ --version
clang version 7.0.1 (tags/RELEASE_701/final)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /opt/local/libexec/llvm-7.0/bin
$ g++-mp-8 --version
g++-mp-8 (MacPorts gcc8 8.3.0_0) …Run Code Online (Sandbox Code Playgroud) 我正在尝试在运行时更改我的 angular 应用程序中的 Locale_Id,但必须用于window.location.reload()在语言环境中触发更改。
我想在不重新加载我的应用程序的情况下更改语言环境。
这是我的代码:
import { LOCALE_ID } from '@angular/core';
import { LocaleService} from "./services/locale.service";
@NgModule({
imports: [//imports],
providers: [
{provide: LOCALE_ID,
deps: [LocaleService],
useFactory: (LocaleService: { locale: string; }) => LocaleService.locale
}
]})
Run Code Online (Sandbox Code Playgroud)
import { Injectable } from '@angular/core';
import { registerLocaleData } from '@angular/common';
import localeEnglish from '@angular/common/locales/en';
import localeArabic from '@angular/common/locales/ar';
@Injectable({ providedIn: 'root' })
export class LocaleService{
private _locale: string;
set locale(value: string) {
this._locale = value;
}
get locale(): …Run Code Online (Sandbox Code Playgroud) 无法在不重新创建活动的情况下更改区域设置
应用程序支持两种语言,当我更改语言时,我必须重新创建活动才能显示所需的结果,但我不想这样做。
private void setNewLocale(AppCompatActivity mContext, @LocaleManager.LocaleDef String language) {
LocaleManager.setNewLocale(this, language);
Intent intent = mContext.getIntent();
startActivity(intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK));
}
Run Code Online (Sandbox Code Playgroud)
我还在所有文本字段上再次设置了文本,但没有帮助!
当我处于应用程序的第三个活动时,当我回到第二个活动时,我更改语言,如果我愿意的话,第二个和第一个活动上的文本我也必须重新创建这些活动,我认为这是不好的方法。我只想更改语言,但不想重新创建活动!
单击按钮时,我设置了区域设置!
if(appPreference.getLanguage().equalsIgnoreCase("en")){
setNewLocale(MainActivity.this, LocaleManager.ARABIC);
}
else
setNewLocale(MainActivity.this, LocaleManager.ENGLISH);
Run Code Online (Sandbox Code Playgroud) 在*nix系统上,您可以locale -a获取可用语言环境列表.
Windows中的等效命令(或操作)是什么?
我在Internet上看过列表,但大多数都是区域设置标签,而不是实际的区域设置名称.此外,并非所有系统都保证安装所有系统,对吧?
请注意,我在这里对"locale"的定义是"locale string",即C的第二个参数setlocale(),它将导致非NULL返回值.
程序化答案也很好,我只是厌倦了蛮力猜测Windows语言环境名称.