Packages

phoenix_kit

1.7.164
1.7.208 1.7.207 1.7.206 1.7.205 1.7.204 1.7.203 1.7.202 1.7.201 1.7.200 1.7.199 1.7.198 1.7.197 1.7.196 1.7.194 1.7.193 1.7.192 1.7.191 1.7.190 1.7.189 1.7.187 1.7.186 1.7.185 1.7.184 1.7.183 1.7.182 1.7.181 1.7.180 1.7.179 1.7.178 1.7.177 1.7.176 1.7.175 1.7.174 1.7.173 1.7.172 1.7.171 1.7.170 1.7.169 1.7.168 1.7.167 1.7.166 1.7.165 1.7.164 1.7.162 1.7.161 1.7.160 1.7.159 1.7.157 1.7.156 1.7.155 1.7.154 1.7.153 1.7.152 1.7.151 1.7.150 1.7.149 1.7.146 1.7.145 1.7.144 1.7.143 1.7.138 1.7.133 1.7.132 1.7.131 1.7.130 1.7.128 1.7.126 1.7.125 1.7.121 1.7.120 1.7.119 1.7.118 1.7.117 1.7.116 1.7.115 1.7.114 1.7.113 1.7.112 1.7.111 1.7.110 1.7.109 1.7.108 1.7.107 1.7.106 1.7.105 1.7.104 1.7.103 1.7.102 1.7.101 1.7.100 1.7.99 1.7.98 1.7.97 1.7.96 1.7.95 1.7.94 1.7.93 1.7.92 1.7.91 1.7.90 1.7.89 1.7.88 1.7.87 1.7.86 1.7.85 1.7.84 1.7.83 1.7.82 1.7.81 1.7.80 1.7.79 1.7.78 1.7.77 1.7.76 1.7.75 1.7.74 1.7.71 1.7.70 1.7.69 1.7.66 1.7.65 1.7.64 1.7.63 1.7.62 1.7.61 1.7.59 1.7.58 1.7.57 1.7.56 1.7.55 1.7.54 1.7.53 1.7.52 1.7.51 1.7.49 1.7.44 1.7.43 1.7.42 1.7.41 1.7.39 1.7.38 1.7.37 1.7.36 1.7.34 1.7.33 1.7.31 1.7.30 1.7.29 1.7.28 1.7.27 1.7.26 1.7.25 1.7.24 1.7.23 1.7.22 1.7.21 1.7.20 1.7.19 1.7.18 1.7.17 1.7.16 1.7.15 1.7.14 1.7.13 1.7.12 1.7.11 1.7.10 1.7.9 1.7.8 1.7.7 1.7.6 1.7.5 1.7.4 1.7.3 1.7.2 1.7.1 1.7.0 1.6.20 1.6.19 1.6.18 1.6.17 1.6.16 1.6.15 1.6.14 1.6.13 1.6.12 1.6.11 1.6.10 1.6.9 1.6.8 1.6.7 1.6.6 1.6.5 1.6.4 1.6.3 1.5.2 1.5.1 1.5.0 1.4.9 1.4.8 1.4.7 1.4.6 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 1.3.2 1.3.1 1.3.0 1.2.10 1.2.9 1.2.8 1.2.7 1.2.5 1.2.4 1.2.2 1.2.1 1.2.0 1.1.0 1.0.0

A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more

Current section

Files

Jump to
phoenix_kit lib modules sitemap locale_path.ex
Raw

lib/modules/sitemap/locale_path.ex

defmodule PhoenixKit.Modules.Sitemap.LocalePath do
@moduledoc """
Shared locale-segment policy for sitemap sources.
Every sitemap source (`publishing`, `static`, `posts`, ...) decides
whether a URL entry should carry a language prefix using the same
four rules:
1. No language supplied → no prefix.
2. Single-language mode (Languages module disabled or only one
enabled) → no prefix is meaningful.
3. The language is the site's primary AND the site-wide
`Languages.default_language_no_prefix?/0` setting is on → omit
the prefix to keep the sitemap consistent with the public URL
shape served at request time. Indexed canonicals must not drift
from served URLs.
4. Otherwise → emit the prefix.
Each source still decides **how** to format the prefix (base code via
`DialectMapper.extract_base/1`, or display code via
`LanguageHelpers.get_display_code/2` for hreflang-aware emission) —
this module owns only the decision, not the formatting.
"""
alias PhoenixKit.Modules.Languages
@doc """
Returns true when the sitemap entry for `language` should include
the locale segment. `is_default` should be true when `language` is
the site's primary language.
Wrapped to survive boot / mix-task contexts where the Languages
module or Settings table may not be reachable —
`single_language_mode?/0`'s rescue returns `true` in that case, so
`emit_prefix?/2` falls back to `false` (no prefix). That keeps the
sitemap consistent with single-language sites under DB-unreachable
conditions; runtime sitemap generation always has a reachable DB.
"""
@spec emit_prefix?(String.t() | nil, boolean()) :: boolean()
def emit_prefix?(nil, _is_default), do: false
def emit_prefix?(_language, is_default) do
cond do
single_language_mode?() -> false
is_default and Languages.default_language_no_prefix?() -> false
true -> true
end
end
@doc """
Returns true when the site is effectively single-language (Languages
module disabled, or only one language enabled). Defensive: rescues
to `true` on any lookup failure so the sitemap omits prefixes
during install / mix tasks rather than emitting broken multi-lang
entries.
"""
@spec single_language_mode?() :: boolean()
def single_language_mode? do
not Languages.enabled?() or length(Languages.get_enabled_languages()) <= 1
rescue
_ -> true
end
end