Comments (3)
I am not sure what you are trying to do with this function here. What are you expecting to happen? Are you using v1 or v2 of the library? Can you include the full implementation of recGetMessages?
from go-i18n.
I would like to be able to translate an item of the list by something like item[n]
I'm using [email protected].
Here is an example
toml file:
item = ["item a", "item b", "item c"]
go.mod
module i18n_demo
go 1.18
require (
github.com/BurntSushi/toml v1.0.0
github.com/nicksnyder/go-i18n/v2 v2.2.1
)
require golang.org/x/text v0.4.0
code:
package main
import (
"fmt"
"github.com/BurntSushi/toml"
"github.com/nicksnyder/go-i18n/v2/i18n"
"golang.org/x/text/language"
)
func main() {
bundle := i18n.NewBundle(language.English)
bundle.RegisterUnmarshalFunc("toml", toml.Unmarshal)
bundle.LoadMessageFile("./en.toml")
localizer := i18n.NewLocalizer(bundle, language.English.String())
fmt.Println(localizer.LocalizeMessage(&i18n.Message{ID: "item.1"})) // I hope I can get "item b" this way
fmt.Println(localizer.LocalizeMessage(&i18n.Message{ID: "item[1]"})) // Or this, or some other way it could be done
fmt.Println(localizer.LocalizeMessage(&i18n.Message{ID: "item."}))
}
>>> <nil>
>>> <nil>
>>> item c <nil>
In the example I define a list and LoadMessageFile it.
Later I would like to be able to translate one of its items using i18n, but as indicated above, I can only get "item c" from "item."
By debuging in the source code I found (LoadMessageFile->ParseMessageFileBytes->ParseMessageFileBytes->recGetMessages)
recGetMessages switch []interface{}
// recGetMessages looks for translation messages inside "raw" parameter,
// scanning nested maps using recursion.
func recGetMessages(raw interface{}, isMapMessage, isInitialCall bool) ([]*Message, error) {
......
case []interface{}:
// Backward compatibility for v1 file format.
messages = make([]*Message, 0, len(data))
for _, data := range data {
// recursively scan slice items
childMessages, err := recGetMessages(data, isMessage(data), false)
if err != nil {
return nil, err
}
messages = append(messages, childMessages...)
}
......
}
But in the string list case all childMessages are Message{ID: "", Other: data} elements
This results in the ID of all the elements in the item list being "item.", so eventually I can't get the correct translation of item[n]
from go-i18n.
Oh, what you are trying to do is not supported. Each message key can only have one value.
You need to create a unique key for each message that you want to translate.
from go-i18n.
Related Issues (20)
- Is there are way to properly handle translation based on gender HOT 1
- Error handling is faulty HOT 3
- Setting the delimiters globally? HOT 2
- How to generate translations for the toml files HOT 3
- Upgrade golang.org/x/text v0.3.8 HOT 1
- `goi18n extract` doesn't seem to work for source file that use generics HOT 3
- Cound you export this function or when translation has error get the original value HOT 7
- Hook to commonly catch errors HOT 4
- Just a review
- Easy wrapper around this library HOT 1
- merging new translation into existing translations omits the hashes
- [Question] Is there any way for reverse lookup in bundle? HOT 1
- Upgrade golang.org/x/text HOT 1
- Breaks on key description HOT 1
- Expose fields (or add access methods) of MessageNotFoundErr HOT 4
- Support template.Options for setting up missing key behavior HOT 2
- V2 is removed HOT 4
- Can we add support of Tajik (TG) language HOT 3
- error `unsupported file format <nil>` when a yaml value is empty HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from go-i18n.