diff --git a/io/system/locale.go b/io/system/locale.go new file mode 100644 index 00000000..7bc75817 --- /dev/null +++ b/io/system/locale.go @@ -0,0 +1,59 @@ +package system + +// Locale provides language information for the current system. +type Locale struct { + // Language is the BCP-47 tag for the primary language of the system. + Language string + // Direction indicates the primary direction of text and layout + // flow for the system. + Direction TextDirection +} + +const ( + axisShift = iota + progressionShift +) + +// TextDirection defines a direction for text flow. +type TextDirection byte + +const ( + // LTR is left-to-right text. + LTR TextDirection = TextDirection(Horizontal<> axisShift) +} + +// Progression returns the way that the text flows relative to the origin. +func (d TextDirection) Progression() TextProgression { + return TextProgression((d & (1 << progressionShift)) >> progressionShift) +} + +// TextAxis defines the layout axis of text. +type TextAxis byte + +const ( + // Horizontal indicates text that flows along the X axis. + Horizontal TextAxis = iota + // Vertical indicates text that flows along the Y axis. + Vertical +) + +// TextProgression indicates how text flows along an axis relative to the +// origin. For these purposes, the origin is defined as the upper-left +// corner of coordinate space. +type TextProgression byte + +const ( + // FromOrigin indicates text that flows along its axis away from the + // origin (upper left corner). + FromOrigin TextProgression = iota + // TowardOrigin indicates text that flows along its axis towards the + // origin (upper left corner). + TowardOrigin +)