class EL_DEFERRED_LOCALE_IMP

(source code)

description

Default locale implemention for unlocalized applications

note
	description: "Default locale implemention for unlocalized applications"

	author: "Finnian Reilly"
	copyright: "Copyright (c) 2001-2022 Finnian Reilly"
	contact: "finnian at eiffel hyphen loop dot com"

	license: "MIT license (See: en.wikipedia.org/wiki/MIT_License)"
	date: "2024-09-22 9:26:48 GMT (Sunday 22nd September 2024)"
	revision: "23"

class
	EL_DEFERRED_LOCALE_IMP

inherit
	ANY

	EL_DEFERRED_LOCALE_I
		redefine
			make
		end

create
	make

feature {NONE} -- Initialization

	make
		do
			Precursor
			create next_translations.make_empty (3)
			from until next_translations.count = 3 loop
				next_translations.extend (create {ZSTRING}.make_empty)
			end
			create date_text.make (Current)
		end

feature -- Access

	date_text: EL_DATE_TEXT

	double_as_string (d: DOUBLE; likeness: STRING): STRING
		do
			Result := Format.double (likeness).formatted (d)
		end

	Decimal_point: CHARACTER = '.'

feature -- Status query

	has_language (a_language: STRING): BOOLEAN
		do
			Result := language ~ Default_language
		end

	is_valid_quantity_key (key: READABLE_STRING_GENERAL; quantity: INTEGER): BOOLEAN
		do
			Result := True
		end

feature {NONE} -- Implementation

	has_item_key (key: READABLE_STRING_GENERAL): BOOLEAN
		-- `True' if `key' is present
		do
			Result := True
		end

	in (a_language: STRING): EL_DEFERRED_LOCALE_I
		do
			Result := Current
		end

	is_curly_brace_enclosed (key: READABLE_STRING_GENERAL): BOOLEAN
		do
			Result := key.count > 2 and then key [1] = '{' and then key [key.count] = '}'
		end

	language: STRING
		do
			Result := "en"
		end

	set_next_quantity_translation (quantity: INTEGER; text: READABLE_STRING_GENERAL)
		-- set text for next call to `quantity_translation_extra' with key enclosed with curly braces "{}"
		local
			index: INTEGER
		do
			index := quantity.abs.min (2)
			if attached next_translations [index] as zstr then
				zstr.wipe_out; zstr.append_string_general (text)
			end
		end

	set_next_translation (text: READABLE_STRING_GENERAL)
		-- set text to return on next call to `translation' with key enclosed with curly braces "{}"
		do
			set_next_quantity_translation (0, text)
		end

	translation_item (key: READABLE_STRING_GENERAL): ZSTRING
		-- by default returns `key' as a `ZSTRING' unless localization is enabled at an
		-- application level
		do
			if is_curly_brace_enclosed (key) then
				Result := next_translations [0].twin
			else
				create Result.make_from_general (key)
			end
		end

	translation_keys: EL_ARRAYED_LIST [ZSTRING]
		do
			create Result.make_empty
		end

	translation_template (partial_key: READABLE_STRING_GENERAL; quantity: INTEGER): EL_TEMPLATE [ZSTRING]
		do
			create Result.make (next_translations [quantity.abs.min (2)])
		end

feature {NONE} -- Internal attributes

	next_translations: SPECIAL [ZSTRING]

feature {NONE} -- Constants

	All_languages: EL_STRING_8_LIST
		once
			create Result.make_comma_split ("en")
		end

	Default_language: STRING = "en"

end