コード例 #1
0
ファイル: plural.go プロジェクト: beatgammit/ginta
func (p pluralStem) Convert(l ginta.Locale, input interface{}) interface{} {
	base := PluralStemResourcesPath + string(p)
	bundle := l.GetResourceBundle(base)

	if f, convert := value(input); convert {
		priority := nothingFoundGlobal
		var translation string

		for key, val := range bundle {
			var nextPriority int
			var op func(float64) bool
			switch {
			case strings.HasPrefix(key, EqualOperation):
				op = equals(key[len(EqualOperation):])
				nextPriority = 0
			case strings.HasPrefix(key, GreaterEqualOperation):
				op = greaterEqual(key[len(GreaterEqualOperation):])
				nextPriority = 1
			case strings.HasPrefix(key, LessEqualOperation):
				op = lessEqual(key[len(LessEqualOperation):])
				nextPriority = 2
			case strings.HasPrefix(key, GreaterOperation):
				op = greater(key[len(GreaterOperation):])
				nextPriority = 3
			case strings.HasPrefix(key, LessOperation):
				op = less(key[len(LessOperation):])
				nextPriority = 4
			case strings.HasPrefix(key, RangeOperation):
				op = inRange(key[len(RangeOperation):])
				nextPriority = 5
			case strings.HasPrefix(key, ModuloOperation):
				op = moduleVal(key[len(ModuloOperation):])
				nextPriority = 6

			case key == DefaultOperation:
				op = _true
				nextPriority = nothingFoundGlobal - 1
			}

			if op != nil && nextPriority < priority && op(f) {
				priority = nextPriority
				translation = val
			}
		}

		if priority < nothingFoundGlobal {
			return translation
		}
	}

	return input

}