diff --git a/Client/Resources/OpenEug.TenTrees.Theme.TenTreesTheme/LocalizedMenu.resx b/Client/Resources/OpenEug.TenTrees.Theme.TenTreesTheme/LocalizedMenu.resx
new file mode 100644
index 0000000..5ccaf6a
--- /dev/null
+++ b/Client/Resources/OpenEug.TenTrees.Theme.TenTreesTheme/LocalizedMenu.resx
@@ -0,0 +1,48 @@
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Home
+
+
+ Enrollment
+
+
+ Classes
+
+
+ Training
+
+
+ Grower
+
+
+ Assessment
+
+
+ Admin
+
+
+ Village
+
+
+ Cohort
+
+
+ Mentor
+
+
+ TreeType
+
+
diff --git a/Client/Resources/OpenEug.TenTrees.Theme.TenTreesTheme/LocalizedMenu.ts-ZA.resx b/Client/Resources/OpenEug.TenTrees.Theme.TenTreesTheme/LocalizedMenu.ts-ZA.resx
new file mode 100644
index 0000000..2746db3
--- /dev/null
+++ b/Client/Resources/OpenEug.TenTrees.Theme.TenTreesTheme/LocalizedMenu.ts-ZA.resx
@@ -0,0 +1,48 @@
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Kaya
+
+
+ Nkandziyiso
+
+
+ Tiklasi
+
+
+ Ku Leha
+
+
+ Mulimi
+
+
+ Xikambelo
+
+
+ Vulawuri
+
+
+ Rixaka
+
+
+ Cohort
+
+
+ Muleriseri
+
+
+ Muxaka wa Murhi
+
+
diff --git a/Client/Themes/TenTreesTheme/LocalizedMenu.razor b/Client/Themes/TenTreesTheme/LocalizedMenu.razor
new file mode 100644
index 0000000..a1f8274
--- /dev/null
+++ b/Client/Themes/TenTreesTheme/LocalizedMenu.razor
@@ -0,0 +1,15 @@
+@namespace OpenEug.TenTrees.Theme.TenTreesTheme
+
+@if (Orientation == "Vertical")
+{
+
+}
+else
+{
+
+}
+
+@code {
+ [Parameter]
+ public string Orientation { get; set; } = "Horizontal";
+}
diff --git a/Client/Themes/TenTreesTheme/LocalizedMenuBase.cs b/Client/Themes/TenTreesTheme/LocalizedMenuBase.cs
new file mode 100644
index 0000000..37feffd
--- /dev/null
+++ b/Client/Themes/TenTreesTheme/LocalizedMenuBase.cs
@@ -0,0 +1,20 @@
+using Microsoft.AspNetCore.Components;
+using Microsoft.Extensions.Localization;
+using Oqtane.Models;
+using Oqtane.Themes.Controls;
+
+namespace OpenEug.TenTrees.Theme.TenTreesTheme
+{
+ public abstract class LocalizedMenuBase : MenuItemsBase
+ {
+ [Inject]
+ protected IStringLocalizer Localizer { get; set; }
+
+ // IStringLocalizer returns the key itself when no resource exists,
+ // so unmapped pages fall back to their raw database name.
+ protected string LocalizeName(Page page)
+ {
+ return Localizer[page.Name];
+ }
+ }
+}
diff --git a/Client/Themes/TenTreesTheme/LocalizedMenuHorizontal.razor b/Client/Themes/TenTreesTheme/LocalizedMenuHorizontal.razor
new file mode 100644
index 0000000..2b4d748
--- /dev/null
+++ b/Client/Themes/TenTreesTheme/LocalizedMenuHorizontal.razor
@@ -0,0 +1,16 @@
+@namespace OpenEug.TenTrees.Theme.TenTreesTheme
+@inherits MenuBase
+
+@if (MenuPages.Any())
+{
+
+
+
+
+
+
+}
diff --git a/Client/Themes/TenTreesTheme/LocalizedMenuItemsHorizontal.razor b/Client/Themes/TenTreesTheme/LocalizedMenuItemsHorizontal.razor
new file mode 100644
index 0000000..cbb0baf
--- /dev/null
+++ b/Client/Themes/TenTreesTheme/LocalizedMenuItemsHorizontal.razor
@@ -0,0 +1,99 @@
+@namespace OpenEug.TenTrees.Theme.TenTreesTheme
+@inherits LocalizedMenuBase
+
+@if (ParentPage != null)
+{
+
+}
+else
+{
+
+}
diff --git a/Client/Themes/TenTreesTheme/LocalizedMenuItemsVertical.razor b/Client/Themes/TenTreesTheme/LocalizedMenuItemsVertical.razor
new file mode 100644
index 0000000..45281d5
--- /dev/null
+++ b/Client/Themes/TenTreesTheme/LocalizedMenuItemsVertical.razor
@@ -0,0 +1,83 @@
+@namespace OpenEug.TenTrees.Theme.TenTreesTheme
+@inherits LocalizedMenuBase
+
+@if (ParentPage != null)
+{
+ foreach (var childPage in GetChildPages())
+ {
+ var _attributes = new Dictionary();
+ _attributes.Add("href", GetUrl(childPage));
+ var _target = GetTarget(childPage);
+ if (!string.IsNullOrEmpty(_target))
+ {
+ _attributes.Add("target", _target);
+ }
+ if (childPage.PageId == PageState.Page.PageId)
+ {
+
+
+
+
+ @LocalizeName(childPage) (current)
+
+
+
+ }
+ else
+ {
+
+
+
+
+ @LocalizeName(childPage)
+
+
+
+ }
+ if (Pages.Any(e => e.ParentId == childPage.PageId))
+ {
+
+ }
+ }
+}
+else
+{
+
+ @foreach (var childPage in GetChildPages())
+ {
+ var _attributes = new Dictionary();
+ _attributes.Add("href", GetUrl(childPage));
+ var _target = GetTarget(childPage);
+ if (!string.IsNullOrEmpty(_target))
+ {
+ _attributes.Add("target", _target);
+ }
+ if (childPage.PageId == PageState.Page.PageId)
+ {
+ -
+
+
+
+ @LocalizeName(childPage) (current)
+
+
+
+ }
+ else
+ {
+ -
+
+
+
+ @LocalizeName(childPage)
+
+
+
+ }
+ if (Pages.Any(e => e.ParentId == childPage.PageId))
+ {
+
+ }
+ }
+
+}
diff --git a/Client/Themes/TenTreesTheme/LocalizedMenuVertical.razor b/Client/Themes/TenTreesTheme/LocalizedMenuVertical.razor
new file mode 100644
index 0000000..2ae0236
--- /dev/null
+++ b/Client/Themes/TenTreesTheme/LocalizedMenuVertical.razor
@@ -0,0 +1,16 @@
+@namespace OpenEug.TenTrees.Theme.TenTreesTheme
+@inherits MenuBase
+
+@if (MenuPages.Any())
+{
+
+
+}
diff --git a/Client/Themes/TenTreesTheme/Theme.razor b/Client/Themes/TenTreesTheme/Theme.razor
index 00541f1..1f018cf 100644
--- a/Client/Themes/TenTreesTheme/Theme.razor
+++ b/Client/Themes/TenTreesTheme/Theme.razor
@@ -4,7 +4,7 @@