diff --git a/src/backend/reservation.rs b/src/backend/reservation.rs
index fcb82f7..11cb0a6 100644
--- a/src/backend/reservation.rs
+++ b/src/backend/reservation.rs
@@ -24,6 +24,7 @@ cfg_if! { if #[cfg(feature = "ssr")] {
     use sqlx::PgPool;
     use crate::backend::user::admin_email;
     use crate::backend::user::emails_for_notify;
+    use crate::locales::trl;
     use rust_decimal::prelude::ToPrimitive;
 
     async fn find_sum_by_uuid(uuid: &Uuid, tx: &mut Transaction<'_, Postgres>) -> Result<ReservationSum, Error> {
@@ -446,7 +447,7 @@ fn chart(data: &Vec<ChartData>, title: &str, month: bool) -> String {
     let mut chart = BarChart::new_with_theme(
         vec![("Bookings", data.iter().map(|d| d.count.to_f32().unwrap_or_default()).collect()).into()],
         if month {
-            data.iter().map(|d| Month::try_from(d.period.to_u8().unwrap_or_default()).unwrap_or(Month::January).name().to_string()).collect()
+            data.iter().map(|d| trl(Month::try_from(d.period.to_u8().unwrap_or_default()).unwrap_or(Month::January).name())()).collect()
         } else {
             data.iter().map(|d| d.period.to_string()).collect()
         },
@@ -472,7 +473,7 @@ pub async fn month_chart(year: i32) -> Result<ApiResponse<String>, ServerFnError
     perm_check!(is_logged_in);
 
     let data = month_chart_data(year).await?;
-    Ok(ApiResponse::Data(chart(&data, "Month bookings", true)))
+    Ok(ApiResponse::Data(chart(&data, &trl("Month bookings")(), true)))
 }
 
 #[server]
@@ -481,7 +482,7 @@ pub async fn year_chart() -> Result<ApiResponse<String>, ServerFnError> {
     perm_check!(is_logged_in);
 
     let data = year_chart_data().await?;
-    Ok(ApiResponse::Data(chart(&data, "Year bookings", false)))
+    Ok(ApiResponse::Data(chart(&data, &trl("Year bookings")(), false)))
 }
 
 #[server]
diff --git a/src/locales/catalogues.rs b/src/locales/catalogues.rs
index 28ec227..c6b4472 100644
--- a/src/locales/catalogues.rs
+++ b/src/locales/catalogues.rs
@@ -143,7 +143,21 @@ lazy_static! {
                 ("Update title", "Upravit titulek"),
                 ("Are you sure you want to delete banner?", "Opravdu chcete smazat banner?"),
                 ("Delete banner", "Smazat banner"),
-                ("Appearance", "Vzhled")
+                ("Appearance", "Vzhled"),
+                ("Month bookings", "Rezrvace po měsících"),
+                ("Year bookings", "Rezervace po letech"),
+                ("January", "Leden"),
+                ("February", "Únor"),
+                ("March", "Březen"),
+                ("April", "Duben"),
+                ("May", "Květen"),
+                ("June", "Červen"),
+                ("July", "Červenec"),
+                ("August", "Srpen"),
+                ("September", "Září"),
+                ("October", "Říjen"),
+                ("November", "Listpopad"),
+                ("December", "Prosinec"),
             ])),
             ("sk", HashMap::from( [
                 ("Dashboard", "Prehlad"),
@@ -155,8 +169,30 @@ lazy_static! {
     };
 }
 
+fn get_locales() -> Vec<Option<String>> {
+    #[cfg(not(feature = "ssr"))]
+    {
+        use_context::<Locales>().unwrap_or(Locales(vec![])).0
+    }
+    #[cfg(feature = "ssr")]
+    {
+        use actix_web::HttpRequest;
+
+        let req = use_context::<HttpRequest>();
+        if let Some(r) = req {
+            if let Some(al) = r.head().headers.get("accept-language") {
+                Locales(al.to_str().unwrap_or("").split(",").map(|l| Some(l.to_string())).collect()).0
+            } else {
+                vec![]
+            }
+        } else {
+            vec![]
+        }
+    }
+}
+
 pub fn get_dictionary() -> Option<&'static HashMap<&'static str, &'static str>> {
-    let locs = use_context::<Locales>().unwrap_or(Locales(vec![])).0;
+    let locs = get_locales();
     for loc in locs {
         if let Some(key) = loc {
             if let Some(k) = key.split("-").collect::<Vec<_>>().get(0) {
diff --git a/src/main.rs b/src/main.rs
index f5c0204..8b1463f 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,3 +1,4 @@
+use actix_web::middleware::Logger;
 use leptos_captcha::spow::pow::Pow;
 use log::error;
 use rezervator::backend::appearance::check_appearance;
@@ -78,6 +79,7 @@ async fn main() -> std::io::Result<()> {
 
         App::new()
             .app_data(Data::new(AppData::new(pool.clone(), mailing.clone())))
+            .wrap(Logger::default())
             .wrap(Authentication)
             .wrap(SessionMiddleware::new(
                 CookieSessionStore::default(),