commit a5ceca910b2c16e688805d33b616f7922ebf09b1
Author: Dominik Chlouba <dchlouba@students.zcu.cz>
Date:   Thu May 27 13:11:39 2021 +0200

    Language changing, better log out, buttons looking

diff --git a/src/Core/Application/Leuze.Core.Application.UI/Areas/Identity/Pages/Account/ChangeLanguage.cshtml b/src/Core/Application/Leuze.Core.Application.UI/Areas/Identity/Pages/Account/ChangeLanguage.cshtml
new file mode 100644
index 0000000..989a6a7
--- /dev/null
+++ b/src/Core/Application/Leuze.Core.Application.UI/Areas/Identity/Pages/Account/ChangeLanguage.cshtml
@@ -0,0 +1,4 @@
+﻿@page
+@model Leuze.Core.Application.UI.Areas.Identity.Pages.Account.ChangeLanguageModel
+@{
+}
diff --git a/src/Core/Application/Leuze.Core.Application.UI/Areas/Identity/Pages/Account/ChangeLanguage.cshtml.cs b/src/Core/Application/Leuze.Core.Application.UI/Areas/Identity/Pages/Account/ChangeLanguage.cshtml.cs
new file mode 100644
index 0000000..0b31ed0
--- /dev/null
+++ b/src/Core/Application/Leuze.Core.Application.UI/Areas/Identity/Pages/Account/ChangeLanguage.cshtml.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Localization;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.RazorPages;
+
+namespace Leuze.Core.Application.UI.Areas.Identity.Pages.Account
+{
+    public class ChangeLanguageModel : PageModel
+    {
+        public IActionResult OnGet(string redirectUri, string culture)
+        {
+            HttpContext.Response.Cookies.Append(
+            CookieRequestCultureProvider.DefaultCookieName,
+            CookieRequestCultureProvider.MakeCookieValue(
+                new RequestCulture(culture, culture)));
+            return LocalRedirect(redirectUri);
+        }
+    }
+}
diff --git a/src/Core/Application/Leuze.Core.Application.UI/Areas/Identity/Pages/Account/Logout.cshtml b/src/Core/Application/Leuze.Core.Application.UI/Areas/Identity/Pages/Account/Logout.cshtml
new file mode 100644
index 0000000..7cf8a27
--- /dev/null
+++ b/src/Core/Application/Leuze.Core.Application.UI/Areas/Identity/Pages/Account/Logout.cshtml
@@ -0,0 +1,4 @@
+﻿@page
+@model Leuze.Core.Application.UI.Areas.Identity.Pages.Account.LogoutModel
+@{
+}
diff --git a/src/Core/Application/Leuze.Core.Application.UI/Areas/Identity/Pages/Account/Logout.cshtml.cs b/src/Core/Application/Leuze.Core.Application.UI/Areas/Identity/Pages/Account/Logout.cshtml.cs
new file mode 100644
index 0000000..5d8affd
--- /dev/null
+++ b/src/Core/Application/Leuze.Core.Application.UI/Areas/Identity/Pages/Account/Logout.cshtml.cs
@@ -0,0 +1,23 @@
+using Leuze.Core.Application.Identity;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Identity;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.RazorPages;
+using System.Threading.Tasks;
+
+namespace Leuze.Core.Application.UI.Areas.Identity.Pages.Account
+{
+    [AllowAnonymous]
+    public class LogoutModel : PageModel
+    {
+        private readonly SignInManager<ApplicationUser> _signInManager;
+
+        public LogoutModel(SignInManager<ApplicationUser> signInManager) => _signInManager = signInManager;
+
+        public async Task<IActionResult> OnGet()
+        {
+            await _signInManager.SignOutAsync();
+            return LocalRedirect("/");
+        }
+    }
+}
diff --git a/src/Core/Application/Leuze.Core.Application.UI/Pages/Index.razor b/src/Core/Application/Leuze.Core.Application.UI/Pages/Index.razor
index 562ca3a..cc04697 100644
--- a/src/Core/Application/Leuze.Core.Application.UI/Pages/Index.razor
+++ b/src/Core/Application/Leuze.Core.Application.UI/Pages/Index.razor
@@ -2,22 +2,23 @@
 @layout MainLayout
 @attribute [Authorize]
 @using ChartJs.Blazor.PieChart
+@inject IStringLocalizer<Index> T 
 
 <AuthorizeView>
-    <h1>Vítejte, @context.User.Identity?.Name</h1>
+    <h1>@T["Welcome"], @context.User.Identity?.Name</h1>
     <div>
         <div>
-            <label>Od</label>
+            <label>@T["From"]</label>
             <input type="date" />
         </div>
         <div>
-            <label>Do</label>
+            <label>@T["To"]</label>
             <input type="date" />
         </div>
         <div>
-            <label>Uživatel</label>
+            <label>@T["User"]</label>
             <select>
-                <option value="">Já</option>
+                <option value="">@T["Me"]</option>
             </select>
         </div>
     </div>
@@ -39,12 +40,12 @@
                 Title = new OptionsTitle
                 {
                     Display = true,
-                    Text = "ChartJs.Blazor Pie Chart"
+                    Text = T["GraphGoalsState"].Value
                 }
             }
         };
 
-        foreach (string color in new[] { "Neschválené", "Aktivní", "Uzavřené" })
+        foreach (string color in new[] { T["NotApproved"].Value, T["Active"].Value, T["Closed"].Value })
         {
             _config.Data.Labels.Add(color);
         }
diff --git a/src/Core/Application/Leuze.Core.Application.UI/Pages/Users/List.razor b/src/Core/Application/Leuze.Core.Application.UI/Pages/Users/List.razor
index 9325c35..8a8935b 100644
--- a/src/Core/Application/Leuze.Core.Application.UI/Pages/Users/List.razor
+++ b/src/Core/Application/Leuze.Core.Application.UI/Pages/Users/List.razor
@@ -29,7 +29,10 @@
                 <td>@user.Role</td>
                 <td>@(user.IsAdUser ? "AD" : "Lokální")</td>
                 <td>
-                    <div @onclick="() => SetUserAsideId(user.Id)">@T["Edit"]</div>
+                    <div class="button-ui" @onclick="() => SetUserAsideId(user.Id)">
+                        <i class="fal fa-edit"></i>
+                        @T["Edit"]
+                    </div>
                 </td>
             </tr>
         }
@@ -55,6 +58,11 @@ else
 <UserAside Show="ShowUserAside" ToggleUserAside="@ToggleUserAside" UserId="UserAsideId" RefetchUsers="FetchUsers" />
 
 <Styled>
+    .button-ui {
+    color: #E30613;
+    cursor:pointer;
+    font-weight:600;
+    }
     .section_header {
     display: flex;
     justify-content: space-between;
diff --git a/src/Core/Application/Leuze.Core.Application.UI/Resources/Pages/Index.cs-CZ.resx b/src/Core/Application/Leuze.Core.Application.UI/Resources/Pages/Index.cs-CZ.resx
new file mode 100644
index 0000000..b0c4646
--- /dev/null
+++ b/src/Core/Application/Leuze.Core.Application.UI/Resources/Pages/Index.cs-CZ.resx
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Active" xml:space="preserve">
+    <value>Aktivní</value>
+  </data>
+  <data name="Closed" xml:space="preserve">
+    <value>Uzavřené</value>
+  </data>
+  <data name="From" xml:space="preserve">
+    <value>Od</value>
+  </data>
+  <data name="GraphGoalsState" xml:space="preserve">
+    <value>Stav cílů</value>
+  </data>
+  <data name="Me" xml:space="preserve">
+    <value>Já</value>
+  </data>
+  <data name="NotApproved" xml:space="preserve">
+    <value>Neschválené</value>
+  </data>
+  <data name="To" xml:space="preserve">
+    <value>Do</value>
+  </data>
+  <data name="User" xml:space="preserve">
+    <value>Uživatel</value>
+  </data>
+  <data name="Welcome" xml:space="preserve">
+    <value>Vítejte</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Core/Application/Leuze.Core.Application.UI/Resources/Pages/Index.de-DE.resx b/src/Core/Application/Leuze.Core.Application.UI/Resources/Pages/Index.de-DE.resx
new file mode 100644
index 0000000..4fdb1b6
--- /dev/null
+++ b/src/Core/Application/Leuze.Core.Application.UI/Resources/Pages/Index.de-DE.resx
@@ -0,0 +1,101 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+	<!-- 
+		Microsoft ResX Schema
+
+		Version 1.3
+
+		The primary goals of this format is to allow a simple XML format 
+		that is mostly human readable. The generation and parsing of the 
+		various data types are done through the TypeConverter classes 
+		associated with the data types.
+
+		Example:
+
+		... ado.net/XML headers & schema ...
+		<resheader name="resmimetype">text/microsoft-resx</resheader>
+		<resheader name="version">1.3</resheader>
+		<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+		<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+		<data name="Name1">this is my long string</data>
+		<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+		<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+			[base64 mime encoded serialized .NET Framework object]
+		</data>
+		<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+			[base64 mime encoded string representing a byte array form of the .NET Framework object]
+		</data>
+
+		There are any number of "resheader" rows that contain simple 
+		name/value pairs.
+
+		Each data row contains a name, and value. The row also contains a 
+		type or mimetype. Type corresponds to a .NET class that support 
+		text/value conversion through the TypeConverter architecture. 
+		Classes that don't support this are serialized and stored with the 
+		mimetype set.
+
+		The mimetype is used for serialized objects, and tells the 
+		ResXResourceReader how to depersist the object. This is currently not 
+		extensible. For a given mimetype the value must be set accordingly:
+
+		Note - application/x-microsoft.net.object.binary.base64 is the format 
+		that the ResXResourceWriter will generate, however the reader can 
+		read any of the formats listed below.
+
+		mimetype: application/x-microsoft.net.object.binary.base64
+		value   : The object must be serialized with 
+			: System.Serialization.Formatters.Binary.BinaryFormatter
+			: and then encoded with base64 encoding.
+
+		mimetype: application/x-microsoft.net.object.soap.base64
+		value   : The object must be serialized with 
+			: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+			: and then encoded with base64 encoding.
+
+		mimetype: application/x-microsoft.net.object.bytearray.base64
+		value   : The object must be serialized into a byte array 
+			: using a System.ComponentModel.TypeConverter
+			: and then encoded with base64 encoding.
+	-->
+	
+	<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+		<xsd:element name="root" msdata:IsDataSet="true">
+			<xsd:complexType>
+				<xsd:choice maxOccurs="unbounded">
+					<xsd:element name="data">
+						<xsd:complexType>
+							<xsd:sequence>
+								<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+								<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+							</xsd:sequence>
+							<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+							<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+							<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+						</xsd:complexType>
+					</xsd:element>
+					<xsd:element name="resheader">
+						<xsd:complexType>
+							<xsd:sequence>
+								<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+							</xsd:sequence>
+							<xsd:attribute name="name" type="xsd:string" use="required" />
+						</xsd:complexType>
+					</xsd:element>
+				</xsd:choice>
+			</xsd:complexType>
+		</xsd:element>
+	</xsd:schema>
+	<resheader name="resmimetype">
+		<value>text/microsoft-resx</value>
+	</resheader>
+	<resheader name="version">
+		<value>1.3</value>
+	</resheader>
+	<resheader name="reader">
+		<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+	</resheader>
+	<resheader name="writer">
+		<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+	</resheader>
+</root>
\ No newline at end of file
diff --git a/src/Core/Application/Leuze.Core.Application.UI/Resources/Shared/NavMenu.cs-CZ.resx b/src/Core/Application/Leuze.Core.Application.UI/Resources/Shared/NavMenu.cs-CZ.resx
new file mode 100644
index 0000000..d0678ef
--- /dev/null
+++ b/src/Core/Application/Leuze.Core.Application.UI/Resources/Shared/NavMenu.cs-CZ.resx
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ManageGoals" xml:space="preserve">
+    <value>Správa cílů</value>
+  </data>
+  <data name="MyGoals" xml:space="preserve">
+    <value>Mé cíle</value>
+  </data>
+  <data name="Overview" xml:space="preserve">
+    <value>Přehled</value>
+  </data>
+  <data name="Users" xml:space="preserve">
+    <value>Uživatelé</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Core/Application/Leuze.Core.Application.UI/Resources/Shared/NavMenu.de-DE.resx b/src/Core/Application/Leuze.Core.Application.UI/Resources/Shared/NavMenu.de-DE.resx
new file mode 100644
index 0000000..4fdb1b6
--- /dev/null
+++ b/src/Core/Application/Leuze.Core.Application.UI/Resources/Shared/NavMenu.de-DE.resx
@@ -0,0 +1,101 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+	<!-- 
+		Microsoft ResX Schema
+
+		Version 1.3
+
+		The primary goals of this format is to allow a simple XML format 
+		that is mostly human readable. The generation and parsing of the 
+		various data types are done through the TypeConverter classes 
+		associated with the data types.
+
+		Example:
+
+		... ado.net/XML headers & schema ...
+		<resheader name="resmimetype">text/microsoft-resx</resheader>
+		<resheader name="version">1.3</resheader>
+		<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+		<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+		<data name="Name1">this is my long string</data>
+		<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+		<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+			[base64 mime encoded serialized .NET Framework object]
+		</data>
+		<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+			[base64 mime encoded string representing a byte array form of the .NET Framework object]
+		</data>
+
+		There are any number of "resheader" rows that contain simple 
+		name/value pairs.
+
+		Each data row contains a name, and value. The row also contains a 
+		type or mimetype. Type corresponds to a .NET class that support 
+		text/value conversion through the TypeConverter architecture. 
+		Classes that don't support this are serialized and stored with the 
+		mimetype set.
+
+		The mimetype is used for serialized objects, and tells the 
+		ResXResourceReader how to depersist the object. This is currently not 
+		extensible. For a given mimetype the value must be set accordingly:
+
+		Note - application/x-microsoft.net.object.binary.base64 is the format 
+		that the ResXResourceWriter will generate, however the reader can 
+		read any of the formats listed below.
+
+		mimetype: application/x-microsoft.net.object.binary.base64
+		value   : The object must be serialized with 
+			: System.Serialization.Formatters.Binary.BinaryFormatter
+			: and then encoded with base64 encoding.
+
+		mimetype: application/x-microsoft.net.object.soap.base64
+		value   : The object must be serialized with 
+			: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+			: and then encoded with base64 encoding.
+
+		mimetype: application/x-microsoft.net.object.bytearray.base64
+		value   : The object must be serialized into a byte array 
+			: using a System.ComponentModel.TypeConverter
+			: and then encoded with base64 encoding.
+	-->
+	
+	<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+		<xsd:element name="root" msdata:IsDataSet="true">
+			<xsd:complexType>
+				<xsd:choice maxOccurs="unbounded">
+					<xsd:element name="data">
+						<xsd:complexType>
+							<xsd:sequence>
+								<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+								<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+							</xsd:sequence>
+							<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+							<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+							<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+						</xsd:complexType>
+					</xsd:element>
+					<xsd:element name="resheader">
+						<xsd:complexType>
+							<xsd:sequence>
+								<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+							</xsd:sequence>
+							<xsd:attribute name="name" type="xsd:string" use="required" />
+						</xsd:complexType>
+					</xsd:element>
+				</xsd:choice>
+			</xsd:complexType>
+		</xsd:element>
+	</xsd:schema>
+	<resheader name="resmimetype">
+		<value>text/microsoft-resx</value>
+	</resheader>
+	<resheader name="version">
+		<value>1.3</value>
+	</resheader>
+	<resheader name="reader">
+		<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+	</resheader>
+	<resheader name="writer">
+		<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+	</resheader>
+</root>
\ No newline at end of file
diff --git a/src/Core/Application/Leuze.Core.Application.UI/Shared/MainLayout.razor b/src/Core/Application/Leuze.Core.Application.UI/Shared/MainLayout.razor
index 1717d9f..b7a4016 100644
--- a/src/Core/Application/Leuze.Core.Application.UI/Shared/MainLayout.razor
+++ b/src/Core/Application/Leuze.Core.Application.UI/Shared/MainLayout.razor
@@ -11,9 +11,13 @@
 <header class="@_header">
     <img class="leuze_logo" src="/Resources/Icons/logo.svg" />
     <div>
+        <select class="langSelector" @onchange="OnSelected">
+            <option value="cs-CZ" selected="@(CultureInfo.CurrentCulture.Name == "cs-CZ")">Česky</option>
+            <option value="de-DE" selected="@(CultureInfo.CurrentCulture.Name == "de-DE")">Deutsch</option>
+        </select>
         <span class="username">@Name</span>
         <img class="user_icon" src="/Resources/Icons/user-circle.svg" />
-        <a href="/MicrosoftIdentity/Account/SignOut">
+        <a href="/Identity/Account/Logout">
             <img class="signout_icon" src="/Resources/Icons/sign-out.svg" />
         </a>
     </div>
@@ -21,6 +25,12 @@
 <NavMenu />
 <main class="@_main">@Body</main>
 
+<Styled>
+    .langSelector{
+    border: none;
+    margin-right: 24px;
+    }
+</Styled>
 <Styled @bind-Classname="@_header">
     width: calc(100% - 84px);
     height: 71px;
@@ -77,4 +87,13 @@
         var identity = await AuthenticationStateProvider.GetAuthenticationStateAsync();
         Name = identity.User.Identity!.Name!;
     }
+
+    private void OnSelected(ChangeEventArgs e)
+    {
+        var culture = (string)e.Value!;
+        var uri = new Uri(_navManager.Uri)
+            .GetComponents(UriComponents.PathAndQuery, UriFormat.Unescaped);
+
+        _navManager.NavigateTo($"/Identity/Account/ChangeLanguage?redirectUri={Uri.EscapeDataString(uri)}&culture={Uri.EscapeDataString(culture)}", forceLoad: true);
+    }
 }
diff --git a/src/Core/Application/Leuze.Core.Application.UI/Shared/NavMenu.razor b/src/Core/Application/Leuze.Core.Application.UI/Shared/NavMenu.razor
index 39dd571..6cf9b9c 100644
--- a/src/Core/Application/Leuze.Core.Application.UI/Shared/NavMenu.razor
+++ b/src/Core/Application/Leuze.Core.Application.UI/Shared/NavMenu.razor
@@ -1,16 +1,18 @@
-﻿<aside class="@_aside">
+﻿@inject IStringLocalizer<NavMenu> T 
+
+<aside class="@_aside">
     <nav class="@_nav">
         <NavLink href="/">
             <div class="item">
                 <img src="/Resources/Icons/analytics.svg" class="item_icon nav_icon_1" />
-                <span>Přehled</span>
+                <span>@T["Overview"]</span>
             </div>
         </NavLink>
         <AuthorizeView Roles="Admin, TL">
             <NavLink href="/goals">
                 <div class="item">
                     <img src="/Resources/Icons/clipboard-list-check.svg" class="item_icon nav_icon_2" />
-                    <span>Správa cílů</span>
+                    <span>@T["ManageGoals"]</span>
                 </div>
             </NavLink>
         </AuthorizeView>
@@ -18,7 +20,7 @@
             <NavLink href="/my-goals">
                 <div class="item">
                     <img src="/Resources/Icons/clipboard-list-check.svg" class="item_icon nav_icon_2" />
-                    <span>Mé cíle</span>
+                    <span>@T["MyGoals"]</span>
                 </div>
             </NavLink>
         </AuthorizeView>
@@ -26,7 +28,7 @@
             <NavLink href="/users">
                 <div class="item">
                     <img src="/Resources/Icons/user.svg" class="item_icon nav_icon_3" />
-                    <span>Uživatelé</span>
+                    <span>@T["Users"]</span>
                 </div>
             </NavLink>
         </AuthorizeView>
diff --git a/src/Core/Application/Leuze.Core.Application.UI/_Imports.razor b/src/Core/Application/Leuze.Core.Application.UI/_Imports.razor
index cdc0b5e..0b926f7 100644
--- a/src/Core/Application/Leuze.Core.Application.UI/_Imports.razor
+++ b/src/Core/Application/Leuze.Core.Application.UI/_Imports.razor
@@ -3,6 +3,7 @@
 @using Microsoft.AspNetCore.Components.Authorization
 @using Microsoft.AspNetCore.Components.Forms
 @using Microsoft.AspNetCore.Components.Routing
+@using System.Globalization
 @using Microsoft.AspNetCore.Components.Web
 @using Microsoft.AspNetCore.Components.Web.Virtualization
 @using Microsoft.JSInterop
diff --git a/src/Modules/Goal/Application/Leuze.Modules.Goal.Application.UI/Pages/GoalDefinitionDetail.razor b/src/Modules/Goal/Application/Leuze.Modules.Goal.Application.UI/Pages/GoalDefinitionDetail.razor
index b119289..8ced194 100644
--- a/src/Modules/Goal/Application/Leuze.Modules.Goal.Application.UI/Pages/GoalDefinitionDetail.razor
+++ b/src/Modules/Goal/Application/Leuze.Modules.Goal.Application.UI/Pages/GoalDefinitionDetail.razor
@@ -40,11 +40,11 @@
     <td>
         <div class="flex">
             <div></div>
-            <div @onclick='() => SetDetailId(range.Id)'>
+            <div class="button-ui" @onclick='() => SetDetailId(range.Id)'>
                 <i class="fal fa-eye"></i>
                 @T["Open"]
             </div>
-            <div @onclick="() => RemoveGoal(range.Id)">
+            <div class="button-ui" @onclick="() => RemoveGoal(range.Id)">
                 <i class="fal fa-trash"></i>
                 @T["Remove"]
             </div>
@@ -60,6 +60,11 @@
 <Leuze.Modules.Goal.Application.UI.Pages.Components.CreateGoalAside Show="ShowCreate" DefinitionId="Id" CloseAside="CloseCreateAside" LoadGoalsInDefinitionView="GetGoals" />
 
 <BlazorStyled.Styled>
+    .button-ui {
+    color: #E30613;
+    cursor:pointer;
+    font-weight:600;
+    }
     .section_header {
     display: flex;
     justify-content: space-between;
diff --git a/src/Modules/Goal/Application/Leuze.Modules.Goal.Application.UI/Pages/GoalRanges.razor b/src/Modules/Goal/Application/Leuze.Modules.Goal.Application.UI/Pages/GoalRanges.razor
index 2defae1..cef4aaf 100644
--- a/src/Modules/Goal/Application/Leuze.Modules.Goal.Application.UI/Pages/GoalRanges.razor
+++ b/src/Modules/Goal/Application/Leuze.Modules.Goal.Application.UI/Pages/GoalRanges.razor
@@ -30,20 +30,20 @@
     <td>@(range.VariCompanySuccess ?? 0)</td>
     <td>
         <div class="flex">
-            <div>
+            <div class="button-ui">
                 <i class="fal fa-download"></i>
                 @T["Export"]
             </div>
 
-                <div @onclick='() => _nav.NavigateTo($"/goals/overview/{range.Id}")'>
+                <div class="button-ui" @onclick='() => _nav.NavigateTo($"/goals/overview/{range.Id}")'>
                     <i class="fal fa-eye"></i>
                     @T["Open"]
                 </div>
-                <div @onclick="() => OpenAside(range.Id)">
+                <div class="button-ui" @onclick="() => OpenAside(range.Id)">
                     <i class="fal fa-edit"></i>
                     @T["Edit"]
                 </div>
-                <div @onclick="() => RemoveArea(range.Id)">
+                <div class="button-ui" @onclick="() => RemoveArea(range.Id)">
                     <i class="fal fa-trash"></i>
                     @T["Remove"]
                 </div>
@@ -69,10 +69,15 @@
 <Leuze.Modules.Goal.Application.UI.Pages.Components.CreateDefinitionRangeAside Show="ShowAside" AsideId="AsideId" LoadAreasInView="LoadAreas" CloseAside="CloseAside" />
 
 <BlazorStyled.Styled>
+    .button-ui {
+    color: #E30613;
+    cursor:pointer;
+    font-weight:600;
+    }
     .flex{
     display: grid;
     align-items: center;
-    grid-template-columns: repeat(4, 100px);
+    grid-template-columns: repeat(4, 106px);
     justify-content: right;
     }
     .flex > div:not(:last-child) {
diff --git a/src/Modules/Goal/Application/Leuze.Modules.Goal.Application.UI/Pages/GoalsManagement.razor b/src/Modules/Goal/Application/Leuze.Modules.Goal.Application.UI/Pages/GoalsManagement.razor
index d73be0a..196c861 100644
--- a/src/Modules/Goal/Application/Leuze.Modules.Goal.Application.UI/Pages/GoalsManagement.razor
+++ b/src/Modules/Goal/Application/Leuze.Modules.Goal.Application.UI/Pages/GoalsManagement.razor
@@ -40,15 +40,15 @@
     <td>
         <div class="flex">
             <AuthorizeView Roles="TL">
-                <div @onclick='() => _nav.NavigateTo($"/goals/detail/{range.Id}")'>
+                <div class="button-ui" @onclick='() => _nav.NavigateTo($"/goals/detail/{range.Id}")'>
                     <i class="fal fa-eye"></i>
                     @T["Open"]
                 </div>
-                <div @onclick="() => OpenAside(range.Id)">
+                <div class="button-ui" @onclick="() => OpenAside(range.Id)">
                     <i class="fal fa-edit"></i>
                     @T["Edit"]
                 </div>
-                <div @onclick="() => RemoveDefinition(range.Id)">
+                <div class="button-ui" @onclick="() => RemoveDefinition(range.Id)">
                     <i class="fal fa-trash"></i>
                     @T["Remove"]
                 </div>
@@ -75,6 +75,11 @@
 <Leuze.Modules.Goal.Application.UI.Pages.Components.CreateGoalDefinition Show="ShowAside" CloseAside="CloseAside" />
 
 <BlazorStyled.Styled>
+    .button-ui {
+    color: #E30613;
+    cursor:pointer;
+    font-weight:600;
+    }
     .section_header {
     display: flex;
     justify-content: space-between;
diff --git a/src/Modules/Goal/Application/Leuze.Modules.Goal.Application.UI/Pages/MyGoalDefinition.razor b/src/Modules/Goal/Application/Leuze.Modules.Goal.Application.UI/Pages/MyGoalDefinition.razor
index f3ecdea..82bb40c 100644
--- a/src/Modules/Goal/Application/Leuze.Modules.Goal.Application.UI/Pages/MyGoalDefinition.razor
+++ b/src/Modules/Goal/Application/Leuze.Modules.Goal.Application.UI/Pages/MyGoalDefinition.razor
@@ -28,7 +28,7 @@
                 <td>
                     <div class="flex">
                         <div></div>
-                        <div @onclick='() => _nav.NavigateTo($"/goals/detail/{range.Id}")'>
+                        <div class="button-ui" @onclick='() => _nav.NavigateTo($"/goals/detail/{range.Id}")'>
                             <i class="fal fa-eye"></i>
                             @T["Open"]
                         </div>
@@ -56,6 +56,11 @@ else
 <div>@T["Loading"]</div>
 }
 <BlazorStyled.Styled>
+    .button-ui {
+    color: #E30613;
+    cursor:pointer;
+    font-weight:600;
+    }
     .section_header {
     display: flex;
     justify-content: space-between;
