Skip to content

Commit

Permalink
chore(l10n): move rari-l10n to rari-doc
Browse files Browse the repository at this point in the history
And clean up a bit.
  • Loading branch information
fiji-flo committed Sep 19, 2024
1 parent 9cf56b4 commit 162721c
Show file tree
Hide file tree
Showing 24 changed files with 114 additions and 145 deletions.
10 changes: 0 additions & 10 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 0 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ members = [
"crates/rari-md",
"crates/rari-doc",
"crates/rari-linter",
"crates/rari-l10n",
"crates/rari-tools",
"crates/css-syntax",
"crates/css-syntax-types",
Expand All @@ -58,7 +57,6 @@ rari-utils = { path = "crates/rari-utils" }
rari-md = { path = "crates/rari-md" }
rari-data = { path = "crates/rari-data" }
rari-templ-func = { path = "crates/rari-templ-func" }
rari-l10n = { path = "crates/rari-l10n" }

tracing = "0.1"
thiserror = "1"
Expand Down
1 change: 0 additions & 1 deletion crates/rari-doc/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ rari-types.workspace = true
rari-md.workspace = true
rari-data.workspace = true
rari-templ-func.workspace = true
rari-l10n.workspace = true

css-syntax = { path = "../css-syntax", features = ["rari"] }

Expand Down
2 changes: 1 addition & 1 deletion crates/rari-doc/src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ use std::path::{PathBuf, StripPrefixError};
use std::sync::PoisonError;

use css_syntax::error::SyntaxError;
use rari_l10n::L10nError;
use rari_md::error::MarkdownError;
use rari_types::error::EnvError;
use rari_types::locale::LocaleError;
use rari_types::ArgError;
use thiserror::Error;

use crate::helpers::l10n::L10nError;
use crate::pages::page::PageCategory;

#[derive(Debug, Error)]
Expand Down
2 changes: 1 addition & 1 deletion crates/rari-doc/src/helpers/css_info.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ use std::sync::OnceLock;

use indexmap::IndexMap;
use itertools::Itertools;
use rari_l10n::l10n_json_data;
use rari_types::globals::data_dir;
use rari_types::locale::Locale;
use rari_types::RariEnv;
use rari_utils::io::read_to_string;
use serde_json::Value;
use tracing::warn;

use super::l10n::l10n_json_data;
use crate::error::DocError;
use crate::templ::api::RariApi;
use crate::templ::render::render_and_decode_ref;
Expand Down
74 changes: 74 additions & 0 deletions crates/rari-doc/src/helpers/l10n.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
use std::collections::HashMap;
use std::fs;
use std::sync::LazyLock;

use rari_types::globals::content_root;
use rari_types::locale::Locale;
use thiserror::Error;

#[derive(Debug, PartialEq, Clone, Error)]
pub enum L10nError {
#[error("Invalid key for L10n json data: {0}")]
InvalidKey(String),
#[error("EnUS missing in L10n json data")]
NoEnUs,
}

/// Look up a translation from mdn/content's `jsondata folder.
/// `typ` refers to the `L1on-<typ>.json` file.
pub fn l10n_json_data(typ: &str, key: &str, locale: Locale) -> Result<&'static str, L10nError> {
if let Some(data) = JSON_L10N_FILES.get(typ).and_then(|file| file.get(key)) {
get_for_locale(locale, data)
.map(|s| s.as_str())
.ok_or(L10nError::NoEnUs)
} else {
Err(L10nError::InvalidKey(key.to_string()))
}
}

fn get_for_locale<T>(locale: Locale, lookup: &HashMap<String, T>) -> Option<&T> {
if let Some(value) = lookup.get(locale.as_url_str()) {
Some(value)
} else if locale != Locale::default() {
lookup.get(Locale::default().as_url_str())
} else {
None
}
}
pub type JsonL10nFile = HashMap<String, HashMap<String, String>>;

static JSON_L10N_FILES: LazyLock<HashMap<String, JsonL10nFile>> = LazyLock::new(|| {
content_root()
.join("jsondata")
.read_dir()
.expect("unable to read jsondata dir")
.filter_map(|f| {
if let Ok(f) = f {
if f.path().is_file()
&& f.path()
.extension()
.map_or(false, |ext| ext.eq_ignore_ascii_case("json"))
&& f.path()
.file_stem()
.and_then(|s| s.to_str())
.map_or(false, |s| s.starts_with("L10n-"))
{
return Some(f.path());
}
}
None
})
.map(|f| {
let typ = f
.file_stem()
.and_then(|s| s.to_str())
.unwrap_or_default()
.strip_prefix("L10n-")
.unwrap_or_default();
let json_str = fs::read_to_string(&f).expect("unable to read l10n json");
let l10n_json: JsonL10nFile =
serde_json::from_str(&json_str).expect("unable to parse l10n json");
(typ.into(), l10n_json)
})
.collect()
});
1 change: 1 addition & 0 deletions crates/rari-doc/src/helpers/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pub mod api_inheritance;
pub mod css_info;
pub mod json_data;
pub mod l10n;
pub mod subpages;
pub mod summary_hack;
pub mod titles;
Expand Down
2 changes: 1 addition & 1 deletion crates/rari-doc/src/helpers/webextapi.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use rari_l10n::l10n_json_data;
use rari_types::fm_types::PageType;
use rari_types::locale::Locale;

use super::l10n::l10n_json_data;
use crate::error::DocError;
use crate::helpers::subpages::{get_sub_pages, SubPagesSorter};
use crate::helpers::titles::api_page_title;
Expand Down
2 changes: 1 addition & 1 deletion crates/rari-doc/src/html/rewriter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ use std::collections::HashSet;

use lol_html::html_content::ContentType;
use lol_html::{element, rewrite_str, HtmlRewriter, RewriteStrSettings, Settings};
use rari_l10n::l10n_json_data;
use rari_md::node_card::NoteCard;
use rari_types::fm_types::PageType;
use rari_types::locale::Locale;
use tracing::warn;
use url::Url;

use crate::error::DocError;
use crate::helpers::l10n::l10n_json_data;
use crate::pages::page::{Page, PageLike};
use crate::pages::types::curriculum::relative_file_to_curriculum_page;
use crate::redirects::resolve_redirect;
Expand Down
2 changes: 1 addition & 1 deletion crates/rari-doc/src/sidebars/apiref.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
use std::borrow::Cow;

use rari_l10n::l10n_json_data;
use rari_types::fm_types::PageType;
use rari_types::locale::Locale;

use crate::error::DocError;
use crate::helpers::api_inheritance::inheritance;
use crate::helpers::json_data::json_data_group;
use crate::helpers::l10n::l10n_json_data;
use crate::helpers::subpages::{get_sub_pages, SubPagesSorter};
use crate::helpers::titles::api_page_title;
use crate::html::sidebar::{
Expand Down
2 changes: 1 addition & 1 deletion crates/rari-doc/src/sidebars/default_api_sidebar.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use rari_l10n::l10n_json_data;
use rari_types::locale::Locale;

use crate::error::DocError;
use crate::helpers::json_data::json_data_group;
use crate::helpers::l10n::l10n_json_data;
use crate::html::sidebar::{
Details, MetaChildren, MetaSidebar, SidebarMetaEntry, SidebarMetaEntryContent,
};
Expand Down
2 changes: 1 addition & 1 deletion crates/rari-doc/src/sidebars/jsref.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ use std::borrow::Cow;
use std::iter::once;
use std::sync::LazyLock;

use rari_l10n::l10n_json_data;
use rari_types::fm_types::PageType;
use rari_types::locale::Locale;

use crate::error::DocError;
use crate::helpers::l10n::l10n_json_data;
use crate::helpers::subpages::get_sub_pages;
use crate::html::sidebar::{
Details, MetaChildren, MetaSidebar, SidebarMetaEntry, SidebarMetaEntryContent,
Expand Down
18 changes: 8 additions & 10 deletions crates/rari-doc/src/templ/templs/badges.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ use rari_templ_func::rari_f;
use rari_types::locale::Locale;

use crate::error::DocError;
use crate::helpers::l10n::l10n_json_data;

#[rari_f]
pub fn experimental() -> Result<String, DocError> {
Expand All @@ -26,32 +27,29 @@ pub fn deprecated() -> Result<String, DocError> {

#[rari_f]
pub fn optional() -> Result<String, DocError> {
let str = rari_l10n::l10n_json_data("Template", "optional", env.locale)?;
let str = l10n_json_data("Template", "optional", env.locale)?;
Ok(format!(
r#"<span class="badge inline optional">{str}</span>"#
))
}

pub fn write_experimental(out: &mut impl std::fmt::Write, locale: Locale) -> Result<(), DocError> {
let title = rari_l10n::l10n_json_data("Template", "experimental_badge_title", locale)?;
let abbreviation =
rari_l10n::l10n_json_data("Template", "experimental_badge_abbreviation", locale)?;
let title = l10n_json_data("Template", "experimental_badge_title", locale)?;
let abbreviation = l10n_json_data("Template", "experimental_badge_abbreviation", locale)?;

Ok(write_badge(out, title, abbreviation, "experimental")?)
}

pub fn write_non_standard(out: &mut impl std::fmt::Write, locale: Locale) -> Result<(), DocError> {
let title = rari_l10n::l10n_json_data("Template", "non_standard_badge_title", locale)?;
let abbreviation =
rari_l10n::l10n_json_data("Template", "non_standard_badge_abbreviation", locale)?;
let title = l10n_json_data("Template", "non_standard_badge_title", locale)?;
let abbreviation = l10n_json_data("Template", "non_standard_badge_abbreviation", locale)?;

Ok(write_badge(out, title, abbreviation, "nonstandard")?)
}

pub fn write_deprecated(out: &mut impl std::fmt::Write, locale: Locale) -> Result<(), DocError> {
let title = rari_l10n::l10n_json_data("Template", "deprecated_badge_title", locale)?;
let abbreviation =
rari_l10n::l10n_json_data("Template", "deprecated_badge_abbreviation", locale)?;
let title = l10n_json_data("Template", "deprecated_badge_title", locale)?;
let abbreviation = l10n_json_data("Template", "deprecated_badge_abbreviation", locale)?;

Ok(write_badge(out, title, abbreviation, "deprecated")?)
}
Expand Down
27 changes: 11 additions & 16 deletions crates/rari-doc/src/templ/templs/banners.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@ use rari_types::AnyArg;
use tracing::warn;

use crate::error::DocError;
use crate::helpers::l10n::l10n_json_data;

#[rari_f]
pub fn deprecated_header(version: Option<AnyArg>) -> Result<String, DocError> {
if version.is_some() {
warn!("Do not use deprectaed header with parameter!")
}
let title = rari_l10n::l10n_json_data("Template", "deprecated_badge_abbreviation", env.locale)?;
let copy = rari_l10n::l10n_json_data("Template", "deprecated_header_copy", env.locale)?;
let title = l10n_json_data("Template", "deprecated_badge_abbreviation", env.locale)?;
let copy = l10n_json_data("Template", "deprecated_header_copy", env.locale)?;

Ok([
r#"<div class="notecard deprecated"><p><strong>"#,
Expand All @@ -28,25 +29,20 @@ pub fn available_in_workers(typ: Option<String>) -> Result<String, DocError> {
let typ = typ
.map(|s| s.to_lowercase())
.map(|typ| format!("available_in_worker__{typ}"));
let copy = rari_l10n::l10n_json_data(
let copy = l10n_json_data(
"Template",
typ.as_deref().unwrap_or(default_typ),
env.locale,
)
.unwrap_or(rari_l10n::l10n_json_data(
"Template",
default_typ,
env.locale,
)?);
.unwrap_or(l10n_json_data("Template", default_typ, env.locale)?);

Ok([r#"<div class="notecard note"><p> "#, copy, "</p></div>"].join(""))
}

#[rari_f]
pub fn see_compat_table() -> Result<String, DocError> {
let title =
rari_l10n::l10n_json_data("Template", "experimental_badge_abbreviation", env.locale)?;
let copy = rari_l10n::l10n_json_data("Template", "see_compat_table_copy", env.locale)?;
let title = l10n_json_data("Template", "experimental_badge_abbreviation", env.locale)?;
let copy = l10n_json_data("Template", "see_compat_table_copy", env.locale)?;

Ok([
r#"<div class="notecard experimental"><p><strong>"#,
Expand All @@ -60,8 +56,8 @@ pub fn see_compat_table() -> Result<String, DocError> {

#[rari_f]
pub fn secure_context_header() -> Result<String, DocError> {
let title = rari_l10n::l10n_json_data("Template", "secure_context_label", env.locale)?;
let copy = rari_l10n::l10n_json_data("Template", "secure_context_header_copy", env.locale)?;
let title = l10n_json_data("Template", "secure_context_label", env.locale)?;
let copy = l10n_json_data("Template", "secure_context_header_copy", env.locale)?;

Ok([
r#"<div class="notecard secure"><p><strong>"#,
Expand All @@ -75,9 +71,8 @@ pub fn secure_context_header() -> Result<String, DocError> {

#[rari_f]
pub fn non_standard_header() -> Result<String, DocError> {
let title =
rari_l10n::l10n_json_data("Template", "non_standard_badge_abbreviation", env.locale)?;
let copy = rari_l10n::l10n_json_data("Template", "non_standard_header_copy", env.locale)?;
let title = l10n_json_data("Template", "non_standard_badge_abbreviation", env.locale)?;
let copy = l10n_json_data("Template", "non_standard_header_copy", env.locale)?;

Ok([
r#"<div class="notecard nonstandard"><p><strong>"#,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use rari_l10n::l10n_json_data;
use rari_templ_func::rari_f;

use crate::error::DocError;
use crate::helpers::l10n::l10n_json_data;
use crate::templ::api::RariApi;

/// Embeds a live sample from a interactive-examples.mdn.mozilla.net GitHub page
Expand Down
3 changes: 2 additions & 1 deletion crates/rari-doc/src/templ/templs/firefox_for_developers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use rari_templ_func::rari_f;
use rari_types::locale::Locale;

use crate::error::DocError;
use crate::helpers::l10n::l10n_json_data;
use crate::html::links::render_link_via_page;

const OLD_VERSIONS: &[&str] = &["3.6", "3.5", "3", "2", "1.5"];
Expand Down Expand Up @@ -68,7 +69,7 @@ fn generate_release_link<T: Display>(
version: T,
locale: Locale,
) -> Result<(), DocError> {
let for_developers = rari_l10n::l10n_json_data("Template", "for_developers", locale)?;
let for_developers = l10n_json_data("Template", "for_developers", locale)?;
out.push_str("<li>");
render_link_via_page(
out,
Expand Down
9 changes: 5 additions & 4 deletions crates/rari-doc/src/templ/templs/inline_labels.rs
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
use rari_templ_func::rari_f;

use crate::error::DocError;
use crate::helpers::l10n::l10n_json_data;

#[rari_f]
pub fn secure_context_inline() -> Result<String, DocError> {
let label = rari_l10n::l10n_json_data("Template", "secure_context_label", env.locale)?;
let copy = rari_l10n::l10n_json_data("Template", "secure_context_inline_copy", env.locale)?;
let label = l10n_json_data("Template", "secure_context_label", env.locale)?;
let copy = l10n_json_data("Template", "secure_context_inline_copy", env.locale)?;

Ok(write_inline_label(label, copy, "secure"))
}

#[rari_f]
pub fn readonly_inline() -> Result<String, DocError> {
let copy = rari_l10n::l10n_json_data("Template", "readonly_badge_title", env.locale)?;
let label = rari_l10n::l10n_json_data("Template", "readonly_badge_abbreviation", env.locale)?;
let copy = l10n_json_data("Template", "readonly_badge_title", env.locale)?;
let label = l10n_json_data("Template", "readonly_badge_abbreviation", env.locale)?;

Ok(write_inline_label(label, copy, "readonly"))
}
Expand Down
Loading

0 comments on commit 162721c

Please sign in to comment.