commit e141d8686a2c5e169b0197b62d986fe68c89fe57
Author: Dominik Chlouba <dchlouba@students.zcu.cz>
Date:   Sun May 23 22:21:02 2021 +0200

    Language mutations and some other fixes

diff --git a/src/Core/Application/Leuze.Core.Application.UI/Areas/Identity/Pages/Account/Login.cshtml b/src/Core/Application/Leuze.Core.Application.UI/Areas/Identity/Pages/Account/Login.cshtml
index 5f49134..763d21c 100644
--- a/src/Core/Application/Leuze.Core.Application.UI/Areas/Identity/Pages/Account/Login.cshtml
+++ b/src/Core/Application/Leuze.Core.Application.UI/Areas/Identity/Pages/Account/Login.cshtml
@@ -161,17 +161,17 @@
 
 <form id="account" method="post" class="login_form">
     <div class="login_row">
-        <label class="login_label" asp-for="Input.Email">@Model.T["UserName"]</label>
+        <label class="login_label" asp-for="Input.Email">@Model.T["Email"]</label>
         <input class="login_input" type="email" asp-for="Input.Email" />
     </div>
     <div class="login_row">
-        <label class="login_label" asp-for="Input.Password">Heslo</label>
+        <label class="login_label" asp-for="Input.Password">@Model.T["Password"]</label>
         <input class="login_input" type="password" asp-for="Input.Password" />
     </div>
     <p>@Model.ErrorMessage</p>
-    <button type="submit" class="login_button">Přihlásit se</button>
+    <button type="submit" class="login_button">@Model.T["Login"]</button>
     <div class="login_or">
-        <div class="login_orText">nebo</div>
+        <div class="login_orText">@Model.T["Or"]</div>
     </div>
     <div class="login_adWrapper">
         <a href="/MicrosoftIdentity/Account/SignIn">
diff --git a/src/Core/Application/Leuze.Core.Application.UI/Components/Login/Form.razor b/src/Core/Application/Leuze.Core.Application.UI/Components/Login/Form.razor
index 7c0114d..1314c89 100644
--- a/src/Core/Application/Leuze.Core.Application.UI/Components/Login/Form.razor
+++ b/src/Core/Application/Leuze.Core.Application.UI/Components/Login/Form.razor
@@ -1,5 +1,6 @@
 ﻿@inject IMediator _mediator
 @inject NavigationManager _navManager
+@inject IStringLocalizer<Form> T
 
 <Styled @bind-Classname="@_form">
     width: 300px;
@@ -102,17 +103,17 @@
 
 <form @onsubmit="Login" class="@_form">
     <div class="@_row">
-        <label class="@_label">Přihlašovací jméno</label>
+        <label class="@_label">@T["Email"]</label>
         <input class="@_input" type="email" @bind-value="Email" />
     </div>
     <div class="@_row">
-        <label class="@_label">Heslo</label>
+        <label class="@_label">@T["Password"]</label>
         <input class="@_input" type="password" @bind-value="Password" />
     </div>
     <p>@Error</p>
-    <button @onclick="Login" class="@_button" @onkeypress:preventDefault>Přihlásit se</button>
+    <button @onclick="Login" class="@_button" @onkeypress:preventDefault>@T["Login"]</button>
     <div class="@_or">
-        <div class="@_orText">nebo</div>
+        <div class="@_orText">@T["Or"]</div>
     </div>
     <div class="@_adWrapper">
         <a href="MicrosoftIdentity/Account/SignIn">
diff --git a/src/Core/Application/Leuze.Core.Application.UI/Leuze.Core.Application.UI.csproj b/src/Core/Application/Leuze.Core.Application.UI/Leuze.Core.Application.UI.csproj
index 7313bbd..4e95c31 100644
--- a/src/Core/Application/Leuze.Core.Application.UI/Leuze.Core.Application.UI.csproj
+++ b/src/Core/Application/Leuze.Core.Application.UI/Leuze.Core.Application.UI.csproj
@@ -23,6 +23,7 @@
 
   <ItemGroup>
     <PackageReference Include="Blazored.Toast" Version="3.1.2" />
+    <PackageReference Include="Blazored.Typeahead" Version="4.6.0" />
     <PackageReference Include="BlazorStyled" Version="3.1.0" />
     <PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="2.2.0" />
     <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="5.0.2" />
diff --git a/src/Core/Application/Leuze.Core.Application.UI/Pages/Login.razor b/src/Core/Application/Leuze.Core.Application.UI/Pages/Login.razor
index da33bcb..d65c25f 100644
--- a/src/Core/Application/Leuze.Core.Application.UI/Pages/Login.razor
+++ b/src/Core/Application/Leuze.Core.Application.UI/Pages/Login.razor
@@ -1,7 +1,6 @@
 ﻿@page "/Identity/Account/ResetPassword"
 @attribute [AllowAnonymous]
 @layout EmptyLayout
-@inject IStringLocalizer<Login> T
 
 <Styled>
     @@media (max-width: 1400px)  {
@@ -13,7 +12,6 @@
 <LeuzeLogo />
 <RobotIcon />
 <Form />
-@T["test"]
 @code {
 
 }
diff --git a/src/Core/Application/Leuze.Core.Application.UI/Pages/Testing/User.razor b/src/Core/Application/Leuze.Core.Application.UI/Pages/Testing/User.razor
deleted file mode 100644
index 775567f..0000000
--- a/src/Core/Application/Leuze.Core.Application.UI/Pages/Testing/User.razor
+++ /dev/null
@@ -1,28 +0,0 @@
-﻿@page "/Testing"
-@attribute [AllowAnonymous]
-@layout EmptyLayout
-@inject IMediator _mediator
-<h3>Testovací GUI pro tvorbu lokálních uživatelů</h3>
-
-<button @onclick="CreateUser">Vytvořit uživatele test@test.cz</button>
-<br/>
-Token: @Token
-<br/>
-<button @onclick="SetPassword">Nastavit heslo Test123*</button>
-
-@code {
-
-    protected string Token { get; set; }
-
-    protected async Task CreateUser()
-    {
-        var result = await _mediator.Send(new CreateLocalUser.Command("Testovací Uživatel", "test@test.cz", null!, new List<Guid>()));
-        Token = result.Result!.Token;
-    }
-
-    protected async Task SetPassword()
-    {
-        await _mediator.Send(new ResetLocalUserPassword.Command("test@test.cz", Token, "Test123*"));
-    }
-
-}
diff --git a/src/Core/Application/Leuze.Core.Application.UI/Pages/Users/Components/UserAside.razor b/src/Core/Application/Leuze.Core.Application.UI/Pages/Users/Components/UserAside.razor
index d6b56b6..526919f 100644
--- a/src/Core/Application/Leuze.Core.Application.UI/Pages/Users/Components/UserAside.razor
+++ b/src/Core/Application/Leuze.Core.Application.UI/Pages/Users/Components/UserAside.razor
@@ -1,31 +1,41 @@
 ﻿@inject IMediator _mediator
 @inject IToastService toastService
+@inject IStringLocalizer<UserAside> T
 
 <aside class="@_aside side_dialog">
     <div class="dialog_header">
-        <div>Nový uživatel</div>
+        <div>
+            @if (UserId != default(Guid))
+            {
+                <span>@T["EditUser"]</span>
+            }
+            else
+            {
+                <span>@T["NewUser"]</span>
+            }
+            </div>
         <button @onclick="Close" type="button">X</button>
     </div>
     <div class="dialog_body">
         @if (UserId != default(Guid) && Loading)
         {
-            <div>Načítám uživatele</div>
+        <div>@T["Loading"]</div>
         }
         else
         {
             <div class="input_row">
-                <label class="input_label">Jméno a příjmení<span style="color:#ff0000">*</span></label>
-                <input type="text" placeholder="Jméno a příjmení" disabled="@IsAdUser" @bind-value="Name" />
+                <label class="input_label">@T["Name"]<span style="color:#ff0000">*</span></label>
+                <input type="text" placeholder="" disabled="@IsAdUser" @bind-value="Name" />
             </div>
             <div class="input_row">
-                <label class="input_label">E-mailová adresa<span style="color:#ff0000">*</span></label>
-                <input type="email" placeholder="E-mail" @bind-value="Email" />
+                <label class="input_label">@T["Email"]<span style="color:#ff0000">*</span></label>
+                <input type="email" placeholder="" @bind-value="Email" />
             </div>
-            <div class="section_title">Role<span style="color:#ff0000">*</span></div>
+            <div class="section_title">@T["Role"]<span style="color:#ff0000">*</span></div>
             <div class="input_row">
                 @if (Roles is null)
                 {
-                    <div>Načítám role</div>
+                <div>@T["LoadingRoles"]</div>
                 }
                 else
                 {
@@ -39,20 +49,24 @@
                     }
                     @if (Roles.Count == 0)
                     {
-                        <div>Nenalezeny žádné role</div>
+                        <div>@T["NoRoles"]</div>
                     }
                 }
             </div>
-            <div class="section_title">Nadřízený</div>
+            <div class="section_title">@T["Senior"]</div>
             <div class="input_row">
                 @if (Users is null)
                 {
-                    <div>Načítám uživatele</div>
+                    <div>@T["LoadingUsers"]</div>
+                }
+                else if (Role == default(Guid))
+                {
+                    <div>@T["FirstRole"]</div>
                 }
                 else
                 {
                     <select @onchange="(e) => SetUser((e.Value != null && (string)e.Value != string.Empty) ? Guid.Parse((string)e.Value) : default(Guid))">
-                        <option value="" selected="@(Senior == default(Guid))">Vyberte uživatele</option>
+                        <option value="" selected="@(Senior == default(Guid))">@T["SelectUser"]</option>
 
                         @foreach (var user in Users)
                         {
@@ -68,8 +82,8 @@
         }
     </div>
     <div class="button_container">
-        <button @onclick="FireAction" disabled="@(IsValidModel() || Sent)">@(UserId == default(Guid) ? "Vytvořit" : "Uložit")</button>
-        <button @onclick="Close">Zrušit</button>
+        <button @onclick="FireAction" disabled="@(IsValidModel() || Sent)">@(UserId == default(Guid) ? T["Create"] : T["Save"])</button>
+        <button @onclick="Close">@T["Cancel"]</button>
     </div>
 </aside>
 
@@ -298,7 +312,7 @@
 
     private async Task FetchUsers()
     {
-        var result = await _mediator.Send(new GetUsersList.Query(false));
+        var result = await _mediator.Send(new GetUsersList.Query(false, Role));
         if (result.IsSuccess && result.Result is not null)
         {
             if (UserId == default(Guid)) Users = result.Result.List;
@@ -312,7 +326,11 @@
         if (result.IsSuccess && result.Result is not null) Roles = result.Result.List;
     }
 
-    private void SetRole(Guid id) => Role = id;
+    private void SetRole(Guid id) 
+    {
+        Role = id;
+        FetchUsers().Wait();
+    }
 
     private void SetUser(Guid id) => Senior = id;
 
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 ce272a9..3ecdee3 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
@@ -2,55 +2,57 @@
 @attribute [Authorize]
 @layout MainLayout
 @inject IMediator _mediator
+@inject IStringLocalizer<List> T
+
 <div class="section_header">
-    <h2>Správa uživatelů</h2>
+    <h2>@T["Title"]</h2>
     <button type="button" @onclick="() => SetUserAsideId(default(Guid))">
         <img src="/Resources/Icons/plus.svg" class="plus_icon" />
-        <span>Přidat uživatele</span>
+        <span>@T["AddUser"]</span>
     </button>
 </div>
 @if (Users is not null)
 {
     <table class="actions" style="width:100%">
         <tr>
-            <th>Jméno</th>
-            <th>Email</th>
-            <th>Role</th>
-            <th>Typ</th>
-            <th>Akce</th>
+            <th>@T["Name"]</th>
+            <th>@T["Email"]</th>
+            <th>@T["Role"]</th>
+            <th>@T["Type"]</th>
+            <th>@T["Actions"]</th>
         </tr>
         @foreach (var user in Users)
         {
-    <tr>
-        <td>@user.Name</td>
-        <td>@user.Email</td>
-        <td>@user.Role</td>
-        <td>@(user.IsAdUser ? "AD" : "Lokální")</td>
-        <td>
-            <div @onclick="() => SetUserAsideId(user.Id)">Upravit</div>
-        </td>
-    </tr>
+            <tr>
+                <td>@user.Name</td>
+                <td>@user.Email</td>
+                <td>@user.Role</td>
+                <td>@(user.IsAdUser ? "AD" : "Lokální")</td>
+                <td>
+                    <div @onclick="() => SetUserAsideId(user.Id)">@T["Edit"]</div>
+                </td>
+            </tr>
         }
     </table>
     @if (Users.Count > 0)
     {
-        <div class="pagination">
+        <!--<div class="pagination">
             <div class="left">
-                <button class="pagination_button"><img class="pagination_icon" src="/Resources/Icons/chevron-double-left.svg"/></button>
-                <button class="pagination_button"><img class="pagination_icon" src="/Resources/Icons/chevron-left.svg" /></button>
+                <button class="pagination_button" @onclick="FirstPage"><img class="pagination_icon" src="/Resources/Icons/chevron-double-left.svg" /></button>
+                <button class="pagination_button" @onclick="PrevPage"><img class="pagination_icon" src="/Resources/Icons/chevron-left.svg" /></button>
                 <input type="number" @bind-value="PageNumber" />
-                <button class="pagination_button"><img class="pagination_icon" src="/Resources/Icons/chevron-right.svg" /></button>
-                <button class="pagination_button"><img class="pagination_icon" src="/Resources/Icons/chevron-double-right.svg" /></button>
+                <button class="pagination_button" @onclick="NextPage"><img class="pagination_icon" src="/Resources/Icons/chevron-right.svg" /></button>
+                <button class="pagination_button" @onclick="LastPage"><img class="pagination_icon" src="/Resources/Icons/chevron-double-right.svg" /></button>
             </div>
-            <div class="right">Zobrazeno <b>@Users.Count z @Total</b></div>
-        </div>
+            <div class="right">@T["Show"] <b>@Users.Count @T["From"] @Total</b></div>
+        </div>-->
     }
 }
 else
 {
-    <div>Loading...</div>
+<div>@T["Loading"]</div>
 }
-<UserAside Show="ShowUserAside" ToggleUserAside="@ToggleUserAside" UserId="UserAsideId" RefetchUsers="FetchUsers"/>
+<UserAside Show="ShowUserAside" ToggleUserAside="@ToggleUserAside" UserId="UserAsideId" RefetchUsers="FetchUsers" />
 
 <Styled>
     .section_header {
@@ -162,7 +164,7 @@ else
 
     private int PageNumber { get; set; } = 1;
 
-    private int PageSize { get; set; } = 12;
+    private int PageSize { get; set; } = 100;
 
     private int Total { get; set; } = 0;
 
diff --git a/src/Core/Application/Leuze.Core.Application.UI/Pages/_Host.cshtml b/src/Core/Application/Leuze.Core.Application.UI/Pages/_Host.cshtml
index cc68945..2018f6f 100644
--- a/src/Core/Application/Leuze.Core.Application.UI/Pages/_Host.cshtml
+++ b/src/Core/Application/Leuze.Core.Application.UI/Pages/_Host.cshtml
@@ -15,7 +15,9 @@
     <title>Leuze</title>
     <base href="~/" />
     <link href="css/site.css" rel="stylesheet" />
+    <link href="_content/Blazored.Typeahead/blazored-typeahead.css" rel="stylesheet" />
     <link href="_content/Blazored.Toast/blazored-toast.min.css" rel="stylesheet" />
+    <script src="_content/Blazored.Typeahead/blazored-typeahead.js"></script>
     <link href="Leuze.App.styles.css" rel="stylesheet" />
 </head>
 <body>
diff --git a/src/Core/Application/Leuze.Core.Application.UI/Resources/Areas/Pages/Account/LoginModel.cs-CZ.resx b/src/Core/Application/Leuze.Core.Application.UI/Resources/Areas/Pages/Account/LoginModel.cs-CZ.resx
index 9b8693e..4834404 100644
--- a/src/Core/Application/Leuze.Core.Application.UI/Resources/Areas/Pages/Account/LoginModel.cs-CZ.resx
+++ b/src/Core/Application/Leuze.Core.Application.UI/Resources/Areas/Pages/Account/LoginModel.cs-CZ.resx
@@ -117,7 +117,16 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <data name="UserName" xml:space="preserve">
-    <value>Přihlašovací jméno 123</value>
+  <data name="Email" xml:space="preserve">
+    <value>E-mailová adresa</value>
+  </data>
+  <data name="Login" xml:space="preserve">
+    <value>Přihlásit se</value>
+  </data>
+  <data name="Or" xml:space="preserve">
+    <value>nebo</value>
+  </data>
+  <data name="Password" xml:space="preserve">
+    <value>Heslo</value>
   </data>
 </root>
\ No newline at end of file
diff --git a/src/Core/Application/Leuze.Core.Application.UI/Resources/Components/Login/Form.cs-CZ.resx b/src/Core/Application/Leuze.Core.Application.UI/Resources/Components/Login/Form.cs-CZ.resx
new file mode 100644
index 0000000..4834404
--- /dev/null
+++ b/src/Core/Application/Leuze.Core.Application.UI/Resources/Components/Login/Form.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="Email" xml:space="preserve">
+    <value>E-mailová adresa</value>
+  </data>
+  <data name="Login" xml:space="preserve">
+    <value>Přihlásit se</value>
+  </data>
+  <data name="Or" xml:space="preserve">
+    <value>nebo</value>
+  </data>
+  <data name="Password" xml:space="preserve">
+    <value>Heslo</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Core/Application/Leuze.Core.Application.UI/Resources/Components/Login/Form.de-DE.resx b/src/Core/Application/Leuze.Core.Application.UI/Resources/Components/Login/Form.de-DE.resx
new file mode 100644
index 0000000..4fdb1b6
--- /dev/null
+++ b/src/Core/Application/Leuze.Core.Application.UI/Resources/Components/Login/Form.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/Pages/Users/Components/UserAside.cs-CZ.resx b/src/Core/Application/Leuze.Core.Application.UI/Resources/Pages/Users/Components/UserAside.cs-CZ.resx
new file mode 100644
index 0000000..cd7efa1
--- /dev/null
+++ b/src/Core/Application/Leuze.Core.Application.UI/Resources/Pages/Users/Components/UserAside.cs-CZ.resx
@@ -0,0 +1,165 @@
+﻿<?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="Cancel" xml:space="preserve">
+    <value>Zrušit</value>
+  </data>
+  <data name="Create" xml:space="preserve">
+    <value>Vytvořit</value>
+  </data>
+  <data name="EditUser" xml:space="preserve">
+    <value>Upravit uživatele</value>
+  </data>
+  <data name="Email" xml:space="preserve">
+    <value>E-mailová adresa</value>
+  </data>
+  <data name="FirstRole" xml:space="preserve">
+    <value>První zvolte roli</value>
+  </data>
+  <data name="Loading" xml:space="preserve">
+    <value>Načítám uživatele...</value>
+  </data>
+  <data name="LoadingRoles" xml:space="preserve">
+    <value>Načítám role...</value>
+  </data>
+  <data name="LoadingUsers" xml:space="preserve">
+    <value>Načítám uživatele...</value>
+  </data>
+  <data name="Name" xml:space="preserve">
+    <value>Jméno a příjmení</value>
+  </data>
+  <data name="NewUser" xml:space="preserve">
+    <value>Nový uživatel</value>
+  </data>
+  <data name="NoRoles" xml:space="preserve">
+    <value>Nenalezeny žádné role</value>
+  </data>
+  <data name="Role" xml:space="preserve">
+    <value>Role</value>
+  </data>
+  <data name="Save" xml:space="preserve">
+    <value>Uložit</value>
+  </data>
+  <data name="SelectUser" xml:space="preserve">
+    <value>Vyberte uživatele</value>
+  </data>
+  <data name="Senior" xml:space="preserve">
+    <value>Nadřízený</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Core/Application/Leuze.Core.Application.UI/Resources/Pages/Users/Components/UserAside.de-DE.resx b/src/Core/Application/Leuze.Core.Application.UI/Resources/Pages/Users/Components/UserAside.de-DE.resx
new file mode 100644
index 0000000..4fdb1b6
--- /dev/null
+++ b/src/Core/Application/Leuze.Core.Application.UI/Resources/Pages/Users/Components/UserAside.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/Pages/Users/List.cs-CZ.resx b/src/Core/Application/Leuze.Core.Application.UI/Resources/Pages/Users/List.cs-CZ.resx
new file mode 100644
index 0000000..51341e8
--- /dev/null
+++ b/src/Core/Application/Leuze.Core.Application.UI/Resources/Pages/Users/List.cs-CZ.resx
@@ -0,0 +1,153 @@
+﻿<?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="Actions" xml:space="preserve">
+    <value>Akce</value>
+  </data>
+  <data name="AddUser" xml:space="preserve">
+    <value>Přidat uživatele</value>
+  </data>
+  <data name="Edit" xml:space="preserve">
+    <value>Upravit</value>
+  </data>
+  <data name="Email" xml:space="preserve">
+    <value>Email</value>
+  </data>
+  <data name="From" xml:space="preserve">
+    <value>z</value>
+  </data>
+  <data name="Loading" xml:space="preserve">
+    <value>Načítám...</value>
+  </data>
+  <data name="Name" xml:space="preserve">
+    <value>Jméno</value>
+  </data>
+  <data name="Role" xml:space="preserve">
+    <value>Role</value>
+  </data>
+  <data name="Show" xml:space="preserve">
+    <value>Zobrazeno</value>
+  </data>
+  <data name="Title" xml:space="preserve">
+    <value>Správa uživatelů</value>
+  </data>
+  <data name="Type" xml:space="preserve">
+    <value>Typ</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/src/Core/Application/Leuze.Core.Application.UI/Resources/Pages/Users/List.de-DE.resx b/src/Core/Application/Leuze.Core.Application.UI/Resources/Pages/Users/List.de-DE.resx
new file mode 100644
index 0000000..4fdb1b6
--- /dev/null
+++ b/src/Core/Application/Leuze.Core.Application.UI/Resources/Pages/Users/List.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/_Imports.razor b/src/Core/Application/Leuze.Core.Application.UI/_Imports.razor
index 1ee291d..a6809b1 100644
--- a/src/Core/Application/Leuze.Core.Application.UI/_Imports.razor
+++ b/src/Core/Application/Leuze.Core.Application.UI/_Imports.razor
@@ -25,4 +25,5 @@
 @using Blazored.Toast.Services
 @using Leuze.Core.Domain.Domains.Users
 @using Microsoft.Extensions.Localization
-@using Microsoft.AspNetCore.Localization
\ No newline at end of file
+@using Microsoft.AspNetCore.Localization
+@using Blazored.Typeahead
\ No newline at end of file
diff --git a/src/Core/Application/Leuze.Core.Application/CQRS/Users/Queries/GetUsersList.cs b/src/Core/Application/Leuze.Core.Application/CQRS/Users/Queries/GetUsersList.cs
index 6e7a922..80cef1c 100644
--- a/src/Core/Application/Leuze.Core.Application/CQRS/Users/Queries/GetUsersList.cs
+++ b/src/Core/Application/Leuze.Core.Application/CQRS/Users/Queries/GetUsersList.cs
@@ -18,7 +18,7 @@ namespace Leuze.Core.Application.CQRS.Users.Queries
         /// <summary>
         /// 
         /// </summary>
-        public record Query(bool ExcludeMyself) : IBaseRequest<Response>;
+        public record Query(bool ExcludeMyself, Guid LimitForRole) : IBaseRequest<Response>;
 
         /// <summary>
         /// 
@@ -49,7 +49,7 @@ namespace Leuze.Core.Application.CQRS.Users.Queries
             /// <returns></returns>
             public async Task<RequestResponse<Response>> Handle(Query request, CancellationToken cancellationToken)
             {
-                var list = await _domainUserRepository.GetListAsync();
+                var list = await _domainUserRepository.GetListAsync(request.LimitForRole);
                 var state = await _authenticationStateProvider.GetAuthenticationStateAsync();
                 var id = Guid.Parse(state.User!.FindFirst(ClaimTypes.NameIdentifier)!.Value);
                 if (request.ExcludeMyself) list = list.Where(o => o.Id != id).ToList();
diff --git a/src/Core/Domain/Leuze.Core.Domain/Repositories/IDomainUserRepository.cs b/src/Core/Domain/Leuze.Core.Domain/Repositories/IDomainUserRepository.cs
index 990ee37..10d9c4f 100644
--- a/src/Core/Domain/Leuze.Core.Domain/Repositories/IDomainUserRepository.cs
+++ b/src/Core/Domain/Leuze.Core.Domain/Repositories/IDomainUserRepository.cs
@@ -52,7 +52,7 @@ namespace Leuze.Core.Domain.Repositories
         /// 
         /// </summary>
         /// <returns></returns>
-        Task<List<UserShortDto>> GetListAsync();
+        Task<List<UserShortDto>> GetListAsync(Guid limitForRole);
 
         /// <summary>
         /// 
diff --git a/src/Core/Infrastructure/Leuze.Core.Infrastructure.Persistence/Repository/DomainUserRepository.cs b/src/Core/Infrastructure/Leuze.Core.Infrastructure.Persistence/Repository/DomainUserRepository.cs
index b4725e0..fdf83c1 100644
--- a/src/Core/Infrastructure/Leuze.Core.Infrastructure.Persistence/Repository/DomainUserRepository.cs
+++ b/src/Core/Infrastructure/Leuze.Core.Infrastructure.Persistence/Repository/DomainUserRepository.cs
@@ -71,7 +71,11 @@ namespace Leuze.Core.Infrastructure.Persistence.Repository
                 .SingleOrDefaultAsync();
 
         /// <inheritdoc/>
-        public async Task<List<UserShortDto>> GetListAsync()
-            => await dbSet.Select(o => new UserShortDto(o.UserId, o.Name.FullName)).ToListAsync();
+        public async Task<List<UserShortDto>> GetListAsync(Guid limitForRole)
+        {
+            var query = dbSet.AsQueryable();
+
+            return await query.Select(o => new UserShortDto(o.UserId, o.Name.FullName)).ToListAsync();
+        }
     }
 }
