@@ -52,7 +52,7 @@ defmodule Cldr.LocaleDisplay do
5252
5353 * `:prefer` signals the preferred name for
5454 a subtag when there are alternatives.
55- The default is `:default `. Few subtags
55+ The default is `:standard `. Few subtags
5656 provide alternative renderings. Some of
5757 the alternative preferences are`:short`,
5858 `:long`, `:menu` and `:variant`.
@@ -116,50 +116,55 @@ defmodule Cldr.LocaleDisplay do
116116
117117 def display_name ( % LanguageTag { } = language_tag , options ) do
118118 { in_locale , backend } = Cldr . locale_and_backend_from ( options )
119- language_display = Keyword . get ( options , :language_display , :standard )
120- prefer = Keyword . get ( options , :prefer , :default )
119+ options = Keyword . merge ( default_options ( ) , options )
120+
121+ standard_or_dialect = Keyword . get ( options , :language_display )
122+ prefer = Keyword . get ( options , :prefer )
123+
124+ # FIXME Catering for legacy
125+ prefer = if prefer == :default , do: :standard , else: prefer
121126
122127 with { :ok , in_locale } <- Cldr . validate_locale ( in_locale , backend ) do
123128 options = Keyword . put ( options , :locale , in_locale )
124129
125130 { :ok , display_names } =
126131 Module . concat ( in_locale . backend , :LocaleDisplay ) . display_names ( in_locale )
127132
128- match_fun = & language_match_fun ( & 1 , & 2 , display_names . language )
129-
130- case first_match (
131- language_tag ,
132- match_fun ,
133- @ omit_script_if_only_one ,
134- language_display ,
135- prefer
136- ) do
137- { language_name , matched_tags } ->
138- language_tag = merge_extensions_and_private_use ( language_tag )
139-
140- subtag_names =
141- language_tag
142- |> subtag_names ( @ basic_tag_order -- matched_tags , display_names , prefer )
143- |> List . flatten ( )
144- |> Enum . map ( & replace_parens_with_brackets / 1 )
145- |> join_subtags ( display_names )
146-
147- extension_names =
148- @ extension_order
149- |> Enum . map ( & Cldr.DisplayName . display_name ( Map . fetch! ( language_tag , & 1 ) , options ) )
150- |> Enum . reject ( & empty? / 1 )
151- |> join_subtags ( display_names )
152-
153- { :ok , format_display_name ( language_name , subtag_names , extension_names , display_names ) }
154-
155- nil ->
156- { :error ,
157- { Cldr.DisplayName.NoDataError ,
158- "The locale #{ inspect ( in_locale ) } has no display name data." } }
159- end
133+ match_fun =
134+ & language_match_fun ( & 1 , & 2 , :language , prefer , display_names )
135+
136+ { matched_tags , language_name } =
137+ first_match ( language_tag , match_fun , @ omit_script_if_only_one , standard_or_dialect )
138+
139+ language_tag =
140+ merge_extensions_and_private_use ( language_tag )
141+
142+ subtag_names =
143+ language_tag
144+ |> subtag_names ( @ basic_tag_order -- matched_tags , prefer , display_names )
145+ |> List . flatten ( )
146+ |> Enum . map ( & replace_parens_with_brackets / 1 )
147+ |> join_subtags ( display_names )
148+
149+ extension_names =
150+ @ extension_order
151+ |> Enum . map ( & Cldr.DisplayName . display_name ( Map . fetch! ( language_tag , & 1 ) , options ) )
152+ |> Enum . reject ( & empty? / 1 )
153+ |> join_subtags ( display_names )
154+
155+ { :ok , format_display_name ( language_name , subtag_names , extension_names , display_names ) }
160156 end
161157 end
162158
159+ defp default_options do
160+ [
161+ prefer: :standard ,
162+ add_likely_subtags: false ,
163+ language_display: :standard ,
164+ prefer: :standar
165+ ]
166+ end
167+
163168 @ doc """
164169 Returns a localised display name for a
165170 locale.
@@ -186,7 +191,7 @@ defmodule Cldr.LocaleDisplay do
186191
187192 * `:prefer` signals the preferred name for
188193 a subtag when there are alternatives.
189- The default is `:default `. Few subtags
194+ The default is `:standard `. Few subtags
190195 provide alternative renderings. Some of
191196 the alternative preferences are`:short`,
192197 `:long`, `:menu` and `:variant`.
@@ -249,30 +254,24 @@ defmodule Cldr.LocaleDisplay do
249254
250255 # If matching on the compound locale then we
251256 # don't need to take any action
252- defp first_match ( language_tag , match_fun , omit_script_if_only_one? , :dialect , prefer ) do
253- case Cldr.Locale . first_match ( language_tag , match_fun , omit_script_if_only_one? ) do
254- { language_name , matched_tags } ->
255- { get_display_preference ( language_name , prefer ) , matched_tags }
256-
257- nil ->
258- nil
259- end
257+ defp first_match ( language_tag , match_fun , omit_script_if_only_one? , :dialect ) do
258+ Cldr.Locale . first_match ( language_tag , match_fun , omit_script_if_only_one? )
260259 end
261260
262261 # If we don't want a compound language then we need to omit
263262 # the territory when matching but restore it afterwards so
264263 # its generated as a subtag
265264 @ reinstate_subtags [ :territory , :script ]
266265
267- defp first_match ( language_tag , match_fun , omit_script_if_only_one? , :standard , prefer ) do
266+ defp first_match ( language_tag , match_fun , omit_script_if_only_one? , :standard ) do
268267 language_tag =
269268 Enum . reduce ( @ reinstate_subtags , language_tag , fn key , tag ->
270269 Map . put ( tag , key , nil )
271270 end )
272271
273272 case Cldr.Locale . first_match ( language_tag , match_fun , omit_script_if_only_one? ) do
274- { language_name , matched_tags } ->
275- { get_display_preference ( language_name , prefer ) , matched_tags -- @ reinstate_subtags }
273+ { matched_tags , display_name } ->
274+ { matched_tags -- @ reinstate_subtags , display_name }
276275
277276 nil ->
278277 nil
@@ -297,11 +296,11 @@ defmodule Cldr.LocaleDisplay do
297296 |> List . to_string ( )
298297 end
299298
300- defp subtag_names ( _locale , [ ] , _display_names , _prefer ) do
299+ defp subtag_names ( _locale , [ ] , _prefer , _display_names ) do
301300 [ ]
302301 end
303302
304- defp subtag_names ( locale , subtags , display_names , prefer ) do
303+ defp subtag_names ( locale , subtags , prefer , display_names ) do
305304 subtags
306305 |> Enum . map ( & get_display_name ( locale , display_names , & 1 , prefer ) )
307306 |> Enum . reject ( & empty? / 1 )
@@ -359,9 +358,9 @@ defmodule Cldr.LocaleDisplay do
359358 Enum . reduce ( fields , & Cldr.Substitution . substitute ( [ & 2 , & 1 ] , join_pattern ) )
360359 end
361360
362- defp language_match_fun ( locale_name , matched_tags , language_names ) do
363- if display_name = Map . get ( language_names , locale_name ) do
364- { display_name , matched_tags }
361+ defp language_match_fun ( locale_name , matched_tags , field , prefer , display_names ) do
362+ if display_name = get_in ( display_names , [ field , locale_name , prefer ] ) do
363+ { matched_tags , display_name }
365364 else
366365 nil
367366 end
0 commit comments