diff --git a/examples/basic-actix-askama-multilingual-site/Cargo.toml b/examples/basic-actix-askama-multilingual-site/Cargo.toml new file mode 100644 index 000000000..30579b83e --- /dev/null +++ b/examples/basic-actix-askama-multilingual-site/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "basic-actix-askama-multilingual-page" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +actix-web = "4.0.0-beta.19" +askama = "0.11.0" +tokio = "1" diff --git a/examples/basic-actix-askama-multilingual-site/src/main.rs b/examples/basic-actix-askama-multilingual-site/src/main.rs new file mode 100644 index 000000000..adda90035 --- /dev/null +++ b/examples/basic-actix-askama-multilingual-site/src/main.rs @@ -0,0 +1,113 @@ +//use actix_files as fs; +use actix_web::{http, middleware, web, App, HttpRequest, HttpResponse, HttpServer, Result}; +use askama::Template; + +#[derive(Template)] +#[template(path = "home/home-en.html")] +struct HomeEn<'a> { + lang: &'a str, + title: &'a str, + page: &'a str, +} + +#[derive(Template)] +#[template(path = "home/home-it.html")] +struct HomeIt<'a> { + lang: &'a str, + title: &'a str, + page: &'a str, +} + +#[derive(Template)] +#[template(path = "about/about-en.html")] +struct AboutEn<'a> { + lang: &'a str, + title: &'a str, + page: &'a str, +} + +#[derive(Template)] +#[template(path = "about/about-it.html")] +struct AboutIt<'a> { + lang: &'a str, + title: &'a str, + page: &'a str, +} + +async fn index() -> Result { + Ok(HttpResponse::TemporaryRedirect() + .insert_header((http::header::LOCATION, "/en")) + .finish()) +} + +async fn home(req: HttpRequest) -> Result { + let lang: String = req.match_info().get("lang").unwrap().parse().unwrap(); + let s = match lang.as_str() { + "en" => HomeEn { + lang: &lang, + title: &format!("Home-{}", &lang), + page: &"home".to_string(), + } + .render() + .unwrap(), + "it" => HomeIt { + lang: &lang, + title: &format!("Home-{}", &lang), + page: &"home".to_string(), + } + .render() + .unwrap(), + _ => "".to_string(), + }; + if s == "" { + Ok(HttpResponse::TemporaryRedirect() + .insert_header((http::header::LOCATION, "/en")) + .finish()) + } else { + Ok(HttpResponse::Ok().content_type("text/html").body(s)) + } +} + +async fn about(req: HttpRequest) -> Result { + let lang: String = req.match_info().get("lang").unwrap().parse().unwrap(); + let s = match lang.as_str() { + "en" => AboutEn { + lang: &lang, + title: &format!("About-{}", &lang), + page: &"about".to_string(), + } + .render() + .unwrap(), + "it" => AboutIt { + lang: &lang, + title: &format!("About-{}", &lang), + page: &"about".to_string(), + } + .render() + .unwrap(), + _ => "".to_string(), + }; + if s == "" { + Ok(HttpResponse::TemporaryRedirect() + .insert_header((http::header::LOCATION, "/en")) + .finish()) + } else { + Ok(HttpResponse::Ok().content_type("text/html").body(s)) + } +} + +#[actix_web::main] +async fn main() -> std::io::Result<()> { + // start http server + HttpServer::new(move || { + App::new() + .wrap(middleware::Logger::default()) + //.service(fs::Files::new("/static", "static")) + .service(web::resource("/").route(web::get().to(index))) + .service(web::resource("/{lang}").route(web::get().to(home))) + .service(web::resource("/{lang}/about").route(web::get().to(about))) + }) + .bind("127.0.0.1:8080")? + .run() + .await +} diff --git a/examples/basic-actix-askama-multilingual-site/templates/about/about-en.html b/examples/basic-actix-askama-multilingual-site/templates/about/about-en.html new file mode 100644 index 000000000..96bdf5792 --- /dev/null +++ b/examples/basic-actix-askama-multilingual-site/templates/about/about-en.html @@ -0,0 +1,10 @@ +{% extends "commons/base-en.html" %} +{% block title %}{{title}}{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +

About-{{lang}}

+

English About

+{% endblock %} \ No newline at end of file diff --git a/examples/basic-actix-askama-multilingual-site/templates/about/about-it.html b/examples/basic-actix-askama-multilingual-site/templates/about/about-it.html new file mode 100644 index 000000000..341680804 --- /dev/null +++ b/examples/basic-actix-askama-multilingual-site/templates/about/about-it.html @@ -0,0 +1,10 @@ +{% extends "commons/base-it.html" %} +{% block title %}{{title}}{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +

About-{{lang}}

+

Italian About

+{% endblock %} \ No newline at end of file diff --git a/examples/basic-actix-askama-multilingual-site/templates/commons/base-en.html b/examples/basic-actix-askama-multilingual-site/templates/commons/base-en.html new file mode 100644 index 000000000..04a946a13 --- /dev/null +++ b/examples/basic-actix-askama-multilingual-site/templates/commons/base-en.html @@ -0,0 +1,22 @@ + + + + {% block title %}{{ title }}{% endblock %} + {% block head %}{% endblock %} + + + +
+ {% block content %}{% endblock %} +
+ + \ No newline at end of file diff --git a/examples/basic-actix-askama-multilingual-site/templates/commons/base-it.html b/examples/basic-actix-askama-multilingual-site/templates/commons/base-it.html new file mode 100644 index 000000000..bc6cd008d --- /dev/null +++ b/examples/basic-actix-askama-multilingual-site/templates/commons/base-it.html @@ -0,0 +1,22 @@ + + + + {% block title %}{{ title }}{% endblock %} + {% block head %}{% endblock %} + + + +
+ {% block content %}{% endblock %} +
+ + \ No newline at end of file diff --git a/examples/basic-actix-askama-multilingual-site/templates/home/home-en.html b/examples/basic-actix-askama-multilingual-site/templates/home/home-en.html new file mode 100644 index 000000000..e4f4dcbc4 --- /dev/null +++ b/examples/basic-actix-askama-multilingual-site/templates/home/home-en.html @@ -0,0 +1,10 @@ +{% extends "commons/base-en.html" %} +{% block title %}{{title}}{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +

Home-{{lang}}

+

English Home

+{% endblock %} \ No newline at end of file diff --git a/examples/basic-actix-askama-multilingual-site/templates/home/home-it.html b/examples/basic-actix-askama-multilingual-site/templates/home/home-it.html new file mode 100644 index 000000000..7f0b2afa9 --- /dev/null +++ b/examples/basic-actix-askama-multilingual-site/templates/home/home-it.html @@ -0,0 +1,10 @@ +{% extends "commons/base-it.html" %} +{% block title %}{{title}}{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +

Home-{{lang}}

+

Italian Home

+{% endblock %} \ No newline at end of file