以完整月份名称格式设置日期格式:[月份名称] [年份]我使用:
format(Sys.Date(),"%B %Y")
现在,我会用阿拉伯语做同样的事情:
## save locals
loc <- Sys.getlocale("LC_TIME")
Sys.setlocale("LC_TIME","Arabic")
format(Sys.Date(),"%B %Y")
## "????? 2015" ## <----should have "جويلية 2015"
## restore locales
Sys.setlocale("LC_TIME",loc)
阿拉伯语月份不会被“????”取代。我不认为这是打印/ Unicode问题,因为阿拉伯语在控制台中正确显示:
"مرحبا "
[1] "مرحبا "
从strptime
?strptime
进行格式设置
在适当的和可用
中使用与字符串相关的特定于区域设置的转换
我认为strptime
没有正确的阿拉伯语翻译。如果这是真的,我可以在哪里解决这个问题?
AS在评论中指出这似乎可能是一个特定的系统/操作系统问题。 实际上,在 Ubuntu 机器下,安装language-pack-ar并调用
Sys.setlocale("LC_TIME", "ar_AE.utf8");
format(Sys.Date(),"%B %Y")
[1] "يوليو 2015"
给出了正确的答案。
但在 Windows 下,将区域设置转换为阿拉伯语(设置面板 - &gt;区域..)并调用相同的问题代码无法解决问题。
答案 0 :(得分:3)
这个答案受到one的启发。我刚刚为@RichieCotton
给出的函数添加了一个格式参数get_today_windows <- function(locale = NULL, fmt = "%B %Y")
{
if(!is.null(locale))
{
lc_ctype <- Sys.getlocale("LC_CTYPE")
lc_time <- Sys.getlocale("LC_TIME")
on.exit(Sys.setlocale("LC_CTYPE", lc_ctype))
on.exit(Sys.setlocale("LC_TIME", lc_time), add = TRUE)
Sys.setlocale("LC_CTYPE", locale)
Sys.setlocale("LC_TIME", locale)
}
## here I am changing
today <- format(Sys.Date(), format = fmt )
current_codepage <- as.character(l10n_info()$codepage)
iconv(today, from = current_codepage, to = "utf8")
}
使用不同的阿拉伯语进行测试,因为各国之间存在一些差异:
get_today_windows("Arabic_Qatar")
## [1] "يوليو 2015"
get_today_windows("Arabic_Tunisia")
## [1] "جوييه 2015"
get_today_windows("Arabic_Saudi Arabia.1256")
## [1] "يوليو 2015"