- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试理解 Go 中的多元化。文档中的示例 https://godoc.org/golang.org/x/text/message/catalog#hdr-String_interpolation不起作用。 plural.Select
方法不存在。它应该是 plural.Selectf
。请注意末尾的 f
。
message.Set(language.English, "You are %d minute(s) late.",
catalog.Var("minutes", plural.Selectf(1, "one", "minute")),
catalog.String("You are %d ${minutes} late."))
p := message.NewPrinter(language.English)
p.Printf("You are %d minute(s) late.", 5)
我在这里找到了另一个教程 https://phraseapp.com/blog/posts/internationalization-i18n-go/ .此代码工作正常
message.Set(language.English, "You have %d problem",
catalog.Var("minutes", plural.Selectf(1, "%d", "one", "minute", "other", "minutes")),
catalog.String("You are %d ${minutes} late."))
printer := message.NewPrinter(language.English)
printer.Printf("You have %d problem", 1)
printer.Println()
printer.Printf("You have %d problem", 3)
printer.Println()
// result
// You are 1 minute late.
// You are 3 minutes late.
两个示例都使用高级字符串插值。现在我试图理解 plural.Selectf
。第一个参数 1
在做什么?为什么我需要第二个参数 %d
?我想我明白了剩下的
"one" : "minute"
"other": "minutes"
我还在 catalog.String
中看到了 %[1]d
。这是做什么的?
非常感谢!我现在非常困惑。
最佳答案
给你!
plural.Selectf
的第一个参数是一个 int
。所以它可以是任何有效的整数。第二个参数是一个字符串
。它应该是一个格式动词,即 %d
或 %s
或 %f
第三个参数是一个空接口(interface),可以接收任何类型,即字符串、结构、catalog.Message、..
让我们举个例子,
func main() {
var (
msg = plural.Selectf(2, "%d",
"=10", "%[1]d task and %[2]d processes remaining!", // interface 1
"=1", "%[1]d task and %[2]d processes", // interface 2
"other", "%d tasks and %d processes!" // interface 3
)
key = "%d task - %d process"
tag = "en"
)
lTag := language.MustParse(tag)
message.Set(lTag, key, msg)
p := message.NewPrinter(language.English)
p.Printf("%d task - %d process", 1, 10)
}
在这里,我们创建了一个语言为英语的 NewPrinter
,并使用 %d task(s) remaining!
标签 en
(英语语言的短代码)。
当
p.Printf("%d task - %d process", 1, 3)
行执行时,转换机制采用第一个参数(格式说明符)即 %d task - %d 处理
并通过与我们为 en
标签设置的键进行比较来检查消息。如果找到 key ,则它会处理消息,即 msg
。
这里
Selectf
的第一个参数表示从 Printf
(即 10 in %d 的第二个值)并与案例选择器进行比较,即案例 1(接口(interface) 1)中的 =10
。如果比较成功,则返回处理后的值,即 1 个任务和 10 个进程
,在情况 1 中。
如果
Printf
接收到 2nd %d 的值而不是 1 和 10,那么它将返回案例 3(接口(interface) 3)中的值
还有,
%[n]d
可以这样使用,
fmt.Printf("%[2]d %[1]d\n", 11, 22)
并打印 22 11
。
希望,这对你有帮助。
关于go - 试图理解 Golang 多元化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51395452/
我是 C++ 的新手,我在使用这段代码时遇到了问题: string output_date(int day, int month, int year){ string date; if
所以我这样做了 tar cvzf test.zip FP 为了创建目录 FP 的 zip 但是,它会列出 zip 中的目录 FP/ FP/php/ FP/php/pdf/ FP/php/docs/ F
我正在尝试在 Swift、Xcode 7.3(所以是 Swift 2.2)中创建一个通用类,但我似乎无法让它通过编译器: protocol Struct1Protocol { } struct Str
我的测试用例是这样的: class FooTest extends PHPUnit_Framework_TestCase { /** @covers MyClass::bar */ f
我正在尝试将brew install wine作为使electron-builder工作的一步。但是我所能得到的只是以下响应: ==> Installing dependencies for wine
我这样做: string[,] string1 = {{"one", "0"},{"Two", "5"},{"Three","1"}}; int b = 0; for(int i = 0; i <=
我正在尝试使用 SetWindowsHookEx 键盘 Hook Notepad.exe。 如您所见,工作线程正在将其 ASCII 代码(即 wParam)发送到指定的服务器。 UINT WINAPI
我正在尝试将 ListView 实现到我的 Fragment 中,但无论我尝试什么,我都会得到一个 NullPointerException。我检查对象是否为 null 并记录是否为 null,看起来
我尝试在一行中对齐两个 div。使用 float left 属性,一切顺利。但是当我在 div 中使用图像时,它开始产生问题。 所以这是我的示例代码:- Some headi
我目前正在使用此代码来获取图像的灰度图像表示并以 (512, 370, 1) 的格式表示它大批。 img_instance = cv2.imread(df.iloc[i][x_col]) / 255.
总结 我正在创建一个简单的应用程序,它允许用户选择一个包含顶级窗口的进程。用户首先键入 native DLL(而非托管 DLL)的路径。然后用户键入将在 Hook 过程中调用的方法的名称。该方法不得返
我是一名优秀的程序员,十分优秀!