PhoenixKit.Modules.Publishing.LanguageHelpers (phoenix_kit v1.7.71)

Copy Markdown View Source

Pure language utility functions for the Publishing module.

Provides language detection, display ordering, language info lookup, and primary language management.

Summary

Functions

Returns all enabled language codes for multi-language support. Falls back to content language if Languages module is disabled.

Determines the display code for a language based on whether multiple dialects of the same base language are enabled.

Gets language details (name, flag) for a given language code.

Returns the primary/canonical language for versioning. Uses Settings.get_content_language().

Checks if a language code is enabled, considering base code matching.

Checks if a language code is reserved (cannot be used as a slug).

Functions

enabled_language_codes()

@spec enabled_language_codes() :: [String.t()]

Returns all enabled language codes for multi-language support. Falls back to content language if Languages module is disabled.

get_display_code(language_code, enabled_languages)

@spec get_display_code(String.t(), [String.t()]) :: String.t()

Determines the display code for a language based on whether multiple dialects of the same base language are enabled.

If only one dialect of a base language is enabled (e.g., just "en-US"), returns the base code ("en") for cleaner display.

If multiple dialects are enabled (e.g., "en-US" and "en-GB"), returns the full dialect code ("en-US") to distinguish them.

get_language_info(language_code)

@spec get_language_info(String.t()) ::
  %{code: String.t(), name: String.t(), flag: String.t()} | nil

Gets language details (name, flag) for a given language code.

Searches in order:

  1. Predefined languages (BeamLabCountries) - for full locale details
  2. User-configured languages - for custom/less common languages

get_primary_language()

@spec get_primary_language() :: String.t()

Returns the primary/canonical language for versioning. Uses Settings.get_content_language().

language_enabled?(language_code, enabled_languages)

@spec language_enabled?(String.t(), [String.t()]) :: boolean()

Checks if a language code is enabled, considering base code matching.

Handles cases where:

  • The code is en and enabled languages has "en-US" -> matches
  • The code is en-US and enabled languages has "en" -> matches

order_languages_for_display(available_languages, enabled_languages, primary_language \\ nil)

@spec order_languages_for_display([String.t()], [String.t()], String.t() | nil) :: [
  String.t()
]

Orders languages for display in the language switcher.

Order: primary language first, then languages with translations (sorted), then languages without translations (sorted).

reserved_language_code?(slug)

@spec reserved_language_code?(String.t()) :: boolean()

Checks if a language code is reserved (cannot be used as a slug).