以下功能导致“10.000”。我居住的地方意味着“一万”。
format!("{:.3}", 10.0);
我希望输出为“10,000”。
答案 0 :(得分:4)
由于标准库没有此功能(数字格式的本地化),您只需用逗号替换点:
fn main() {
println!("{}", format!("{:.3}", 10.0).replacen(".", ",", 1));
}
还有其他方法可以做到这一点,但这可能是最直接的解决方案。
答案 1 :(得分:4)
在Rust标准库中不支持国际化(i18n)或本地化(l10n)。
有几个原因,没有特别的顺序:
format!
机制将用于编写JSON或XML文件。您真的不希望最终得到格式不同的文件,具体取决于编码它的机器的区域设置。这是灾难的秘诀。
在运行时检测语言环境也是不友好的优化。突然之间,您无法在编译时(甚至部分)预先计算内容,甚至无法知道在编译时要分配哪个大小的缓冲区。
这与可疑的用处有关。日期和数字可以说是重要的,但是这种美国与英国的格式化战争最终会在海洋中下降。一位法国语法小学生肯定会理解这个数字的格式是典型的法语格式......但如果周围的文字是英文的话,那对她来说是无济于事的(我们法语在教学/学习外语方面非常糟糕)。区域设置应该影响语言选择,排序顺序等...仅仅改变数字的格式是没有意义的,所有应该随之切换,这需要更严格的支持(检查gettext
为一个提供良好 base 的C库。
基于对主机语言环境的区域设置的检测,并且它对整个过程是全局的,在这个多线程Web服务器时代,它也是非常可疑的架构选择。想象一下,如果Facebook在欧洲以瑞典语提供服务只是因为它的数据中心正在那里运行。
最后,所有这些语言/日期/ ...支持都需要大量的数据。 ICU内嵌了几十(或几百?)MB的此类数据。这会使std
的大小爆炸,并使其完全不适合嵌入式开发;无论如何,这可能并不在乎。
当然,如果你只选择支持少数几种语言,你可以大大减少这种情况......这是将其置于标准库外的另一个理由。
答案 2 :(得分:1)
这不是宏class ViewController: UIViewController {
var keyboardOnScreen = false
@IBOutlet weak var searchBar: UISearchBar!
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name:.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: .UIKeyboardWillHide, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow), name: .UIKeyboardDidShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidHide), name: .UIKeyboardDidHide, object: nil)
searchBar.delegate = self
}
}
extension ViewController: UISearchBarDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
func keyboardWillShow(_ notification: Notification) {
if !keyboardOnScreen {
view.frame.origin.y -= keyboardHeight(notification) }
}
func keyboardWillHide(_ notification: Notification) {
if keyboardOnScreen {
view.frame.origin.y += keyboardHeight(notification)
}
}
func keyboardDidShow(_ notification: Notification) {
keyboardOnScreen = true
}
func keyboardDidHide(_ notification: Notification) {
keyboardOnScreen = false
}
private func keyboardHeight(_ notification: Notification) -> CGFloat {
let userInfo = (notification as NSNotification).userInfo
let keyboardSize = userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue
return keyboardSize.cgRectValue.height
}
private func resignIfFirstResponder(_ textField: UITextField) {
if textField.isFirstResponder {
textField.resignFirstResponder()
}
}
@IBAction func userDidTapView(_ sender: AnyObject) {
resignIfFirstResponder(textField)
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}
}
的作用。此选项应由Rust处理。不幸的是,我的搜索引导我得出Rust不处理语言环境的结论(但是?)。
有一个库rust-locale,但它们仍处于alpha状态。