Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F21907796
set_locale_plug.ex
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
1 KB
Referenced Files
None
Subscribers
None
set_locale_plug.ex
View Options
# Pleroma: A lightweight social networking server
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
# NOTE: this module is based on https://github.com/smeevil/set_locale
defmodule
Pleroma.Web.Plugs.SetLocalePlug
do
import
Plug.Conn
,
only
:
[
get_req_header
:
2
,
assign
:
3
]
def
init
(
_
),
do
:
nil
def
call
(
conn
,
_
)
do
locale
=
get_locale_from_header
(
conn
)
||
Gettext
.
get_locale
()
Gettext
.
put_locale
(
locale
)
assign
(
conn
,
:locale
,
locale
)
end
defp
get_locale_from_header
(
conn
)
do
conn
|>
extract_accept_language
()
|>
Enum
.
find
(
&
supported_locale?
/
1
)
end
defp
extract_accept_language
(
conn
)
do
case
get_req_header
(
conn
,
"accept-language"
)
do
[
value
|
_
]
->
value
|>
String
.
split
(
","
)
|>
Enum
.
map
(
&
parse_language_option
/
1
)
|>
Enum
.
sort
(
&
(
&1
.
quality
>
&2
.
quality
))
|>
Enum
.
map
(
&
&1
.
tag
)
|>
Enum
.
reject
(
&
is_nil
/
1
)
|>
ensure_language_fallbacks
()
_
->
[]
end
end
defp
supported_locale?
(
locale
)
do
Pleroma.Web.Gettext
|>
Gettext
.
known_locales
()
|>
Enum
.
member?
(
locale
)
end
defp
parse_language_option
(
string
)
do
captures
=
Regex
.
named_captures
(
~r/^
\s
?(?<tag>[\w\-]+)(?:;q=(?<quality>[
\d
\.]+))?$/i
,
string
)
quality
=
case
Float
.
parse
(
captures
[
"quality"
]
||
"1.0"
)
do
{
val
,
_
}
->
val
:error
->
1.0
end
%{
tag
:
captures
[
"tag"
],
quality
:
quality
}
end
defp
ensure_language_fallbacks
(
tags
)
do
Enum
.
flat_map
(
tags
,
fn
tag
->
[
language
|
_
]
=
String
.
split
(
tag
,
"-"
)
if
Enum
.
member?
(
tags
,
language
),
do
:
[
tag
],
else
:
[
tag
,
language
]
end
)
end
end
File Metadata
Details
Attached
Mime Type
text/x-ruby
Expires
Sun, Dec 28, 1:42 AM (1 d, 15 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
816031
Default Alt Text
set_locale_plug.ex (1 KB)
Attached To
Mode
rPUBE pleroma-upstream
Attached
Detach File
Event Timeline
Log In to Comment