Documentation
¶
Overview ¶
Package durationformat implements the ECMA-402 Intl.DurationFormat constructor.
locales, _ := locale.ParseList("en-US")
format, _ := durationformat.New(locales, durationformat.Options{})
out, _ := format.Format(durationformat.Duration{Hours: 1, Minutes: 2})
_ = out
See README.md for usage examples and SPECS/43-durationformat.md for the contract.
Example ¶
Example demonstrates Intl.DurationFormat.prototype.format from ECMA-402.
package main
import (
"fmt"
"github.com/agentable/go-intl/durationformat"
"github.com/agentable/go-intl/locale"
)
func main() {
format, err := durationformat.New(mustLocaleList("en"), durationformat.Options{
Style: durationformat.DigitalStyle,
})
if err != nil {
panic(err)
}
out, err := format.Format(durationformat.Duration{
Hours: 1,
Minutes: 2,
Seconds: 3,
})
if err != nil {
panic(err)
}
fmt.Println(out)
}
func mustLocaleList(tags ...string) locale.List {
locales, err := locale.ParseList(tags...)
if err != nil {
panic(err)
}
return locales
}
Output: 1:02:03
Example (Options) ¶
Example_options demonstrates Intl.DurationFormat constructor options from ECMA-402.
package main
import (
"fmt"
"github.com/agentable/go-intl/durationformat"
"github.com/agentable/go-intl/locale"
)
func main() {
format, err := durationformat.New(mustLocaleList("en"), durationformat.Options{
Style: durationformat.LongStyle,
})
if err != nil {
panic(err)
}
out, err := format.Format(durationformat.Duration{
Hours: 1,
Minutes: 2,
})
if err != nil {
panic(err)
}
fmt.Println(out)
}
func mustLocaleList(tags ...string) locale.List {
locales, err := locale.ParseList(tags...)
if err != nil {
panic(err)
}
return locales
}
Output: 1 hour, 2 minutes
Index ¶
Examples ¶
Constants ¶
View Source
const ( LookupLocaleMatcher LocaleMatcher = "lookup" BestFitLocaleMatcher LocaleMatcher = "best fit" LongStyle Style = "long" ShortStyle Style = "short" NarrowStyle Style = "narrow" DigitalStyle Style = "digital" LongUnitStyle UnitStyle = "long" ShortUnitStyle UnitStyle = "short" NarrowUnitStyle UnitStyle = "narrow" NumericUnitStyle UnitStyle = "numeric" TwoDigitUnitStyle UnitStyle = "2-digit" AlwaysDisplay Display = "always" AutoDisplay Display = "auto" Year Unit = "year" Month Unit = "month" Week Unit = "week" Day Unit = "day" Hour Unit = "hour" Minute Unit = "minute" Second Unit = "second" Millisecond Unit = "millisecond" Microsecond Unit = "microsecond" Nanosecond Unit = "nanosecond" // PartType values emitted by Format/FormatToParts. // ECMA-402 §18.5.5 PartitionDurationFormatPattern combines list-pattern // literals, digital separators, and embedded NumberFormat partition records. // DurationFormat's embedded NumberFormat uses Style="unit" (long/short/narrow) // or Style="decimal" (2-digit/numeric); other notations are not exposed, // so only the constants below can appear. PartLiteral PartType = "literal" PartInteger PartType = "integer" PartGroup PartType = "group" PartDecimal PartType = "decimal" PartFraction PartType = "fraction" PartPlusSign PartType = "plusSign" PartMinusSign PartType = "minusSign" PartInfinity PartType = "infinity" PartNaN PartType = "nan" PartUnit PartType = "unit" )
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Duration ¶
type Duration struct {
Years int64 `json:"years"`
Months int64 `json:"months"`
Weeks int64 `json:"weeks"`
Days int64 `json:"days"`
Hours int64 `json:"hours"`
Minutes int64 `json:"minutes"`
Seconds int64 `json:"seconds"`
Milliseconds int64 `json:"milliseconds"`
Microseconds int64 `json:"microseconds"`
Nanoseconds int64 `json:"nanoseconds"`
}
type DurationFormat ¶
type DurationFormat struct {
// contains filtered or unexported fields
}
func (*DurationFormat) FormatToParts ¶
func (f *DurationFormat) FormatToParts(duration Duration) ([]Part, error)
Example ¶
ExampleDurationFormat_FormatToParts demonstrates Intl.DurationFormat.prototype.formatToParts from ECMA-402.
package main
import (
"fmt"
"github.com/agentable/go-intl/durationformat"
"github.com/agentable/go-intl/locale"
)
func main() {
format, err := durationformat.New(mustLocaleList("en"), durationformat.Options{
Style: durationformat.DigitalStyle,
})
if err != nil {
panic(err)
}
parts, err := format.FormatToParts(durationformat.Duration{
Hours: 1,
Minutes: 2,
Seconds: 3,
})
if err != nil {
panic(err)
}
for _, part := range parts {
fmt.Printf("%s=%q unit=%q\n", part.Type, part.Value, part.Unit)
}
}
func mustLocaleList(tags ...string) locale.List {
locales, err := locale.ParseList(tags...)
if err != nil {
panic(err)
}
return locales
}
Output: integer="1" unit="hour" literal=":" unit="" integer="02" unit="minute" literal=":" unit="" integer="03" unit="second"
func (*DurationFormat) ResolvedOptions ¶
func (f *DurationFormat) ResolvedOptions() ResolvedOptions
type LocaleMatcher ¶
type LocaleMatcher string
type Options ¶
type Options struct {
LocaleMatcher LocaleMatcher
NumberingSystem string
Style Style
Years UnitStyle
YearsDisplay Display
Months UnitStyle
MonthsDisplay Display
Weeks UnitStyle
WeeksDisplay Display
Days UnitStyle
DaysDisplay Display
Hours UnitStyle
HoursDisplay Display
Minutes UnitStyle
MinutesDisplay Display
Seconds UnitStyle
SecondsDisplay Display
Milliseconds UnitStyle
MillisecondsDisplay Display
Microseconds UnitStyle
MicrosecondsDisplay Display
Nanoseconds UnitStyle
NanosecondsDisplay Display
FractionalDigits *int
}
type ResolvedOptions ¶
type ResolvedOptions struct {
// Locale is the resolved locale. Mirrors Intl.DurationFormat resolved option "locale".
Locale locale.Locale `json:"locale"`
// NumberingSystem is the resolved numbering system. Mirrors Intl.DurationFormat resolved option "numberingSystem".
NumberingSystem string `json:"numberingSystem"`
// Style is the resolved overall style. Mirrors Intl.DurationFormat resolved option "style".
Style Style `json:"style"`
// Years is the resolved years unit style. Mirrors Intl.DurationFormat resolved option "years".
Years UnitStyle `json:"years"`
// YearsDisplay is the resolved years display. Mirrors Intl.DurationFormat resolved option "yearsDisplay".
YearsDisplay Display `json:"yearsDisplay"`
// Months is the resolved months unit style. Mirrors Intl.DurationFormat resolved option "months".
Months UnitStyle `json:"months"`
// MonthsDisplay is the resolved months display. Mirrors Intl.DurationFormat resolved option "monthsDisplay".
MonthsDisplay Display `json:"monthsDisplay"`
// Weeks is the resolved weeks unit style. Mirrors Intl.DurationFormat resolved option "weeks".
Weeks UnitStyle `json:"weeks"`
// WeeksDisplay is the resolved weeks display. Mirrors Intl.DurationFormat resolved option "weeksDisplay".
WeeksDisplay Display `json:"weeksDisplay"`
// Days is the resolved days unit style. Mirrors Intl.DurationFormat resolved option "days".
Days UnitStyle `json:"days"`
// DaysDisplay is the resolved days display. Mirrors Intl.DurationFormat resolved option "daysDisplay".
DaysDisplay Display `json:"daysDisplay"`
// Hours is the resolved hours unit style. Mirrors Intl.DurationFormat resolved option "hours".
Hours UnitStyle `json:"hours"`
// HoursDisplay is the resolved hours display. Mirrors Intl.DurationFormat resolved option "hoursDisplay".
HoursDisplay Display `json:"hoursDisplay"`
// Minutes is the resolved minutes unit style. Mirrors Intl.DurationFormat resolved option "minutes".
Minutes UnitStyle `json:"minutes"`
// MinutesDisplay is the resolved minutes display. Mirrors Intl.DurationFormat resolved option "minutesDisplay".
MinutesDisplay Display `json:"minutesDisplay"`
// Seconds is the resolved seconds unit style. Mirrors Intl.DurationFormat resolved option "seconds".
Seconds UnitStyle `json:"seconds"`
// SecondsDisplay is the resolved seconds display. Mirrors Intl.DurationFormat resolved option "secondsDisplay".
SecondsDisplay Display `json:"secondsDisplay"`
// Milliseconds is the resolved milliseconds unit style. Mirrors Intl.DurationFormat resolved option "milliseconds".
Milliseconds UnitStyle `json:"milliseconds"`
// MillisecondsDisplay is the resolved milliseconds display. Mirrors Intl.DurationFormat resolved option "millisecondsDisplay".
MillisecondsDisplay Display `json:"millisecondsDisplay"`
// Microseconds is the resolved microseconds unit style. Mirrors Intl.DurationFormat resolved option "microseconds".
Microseconds UnitStyle `json:"microseconds"`
// MicrosecondsDisplay is the resolved microseconds display. Mirrors Intl.DurationFormat resolved option "microsecondsDisplay".
MicrosecondsDisplay Display `json:"microsecondsDisplay"`
// Nanoseconds is the resolved nanoseconds unit style. Mirrors Intl.DurationFormat resolved option "nanoseconds".
Nanoseconds UnitStyle `json:"nanoseconds"`
// NanosecondsDisplay is the resolved nanoseconds display. Mirrors Intl.DurationFormat resolved option "nanosecondsDisplay".
NanosecondsDisplay Display `json:"nanosecondsDisplay"`
// FractionalDigits is the resolved fractional digit count. Mirrors Intl.DurationFormat resolved option "fractionalDigits".
// Nil when ECMA-402 omits fractionalDigits because the option was absent.
FractionalDigits *int `json:"fractionalDigits,omitempty"`
}
Click to show internal directories.
Click to hide internal directories.