Let's assume your project looks like this:

You could use different ResourceManager depending on the Thread Culture.
With a small T4 template you can make it strongly typed(iterate the resource file and create a property for each string)
using ConsoleApplication6.Translations.French;
using System;
using System.Resources;
namespace ConsoleApplication6
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(SystemMessagesManager.GetString("Title"));
Console.ReadLine();
}
public static class SystemMessagesManager
{
static ResourceManager rsManager;
static SystemMessagesManager()
{
//Get the current manager based on the current Culture
if (Thread.CurrentThread.CurrentCulture.Name == "fr-FR")
rsManager = SystemMessagesFrench.ResourceManager;
else if (Thread.CurrentThread.CurrentCulture.Name == "el-GR")
rsManager = SystemMessagesGreek.ResourceManager;
else
rsManager = SystemMessagesEnglish.ResourceManager;
}
public static string GetString(string Key)
{
return rsManager.GetString(Key) ?? SystemMessagesEnglish.ResourceManager.GetString(Key);
}
}
}
}
About the T4 template,check this :
How to use a resx resource file in a T4 template
Below you can see a sample code.
Let's say you have this in your project:

Using the following template you can auto generate the class:
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ assembly name="System" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System.Xml" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Xml" #>
<#@ import namespace="System.Linq" #>
<#@ output extension=".cs" #>
using System.Resources;
using System.Threading;
namespace YourNameSpace
{
public static class SystemMessagesManager
{
static ResourceManager rsManager;
static SystemMessagesManager()
{
//Get the current manager based on the current Culture
if (Thread.CurrentThread.CurrentCulture.Name == "fr-FR")
rsManager = SystemMessagesFrench.ResourceManager;
else if (Thread.CurrentThread.CurrentCulture.Name == "el-GR")
rsManager = SystemMessagesGreek.ResourceManager;
else
rsManager = SystemMessagesEnglish.ResourceManager;
}
private static string GetString(string Key)
{
return rsManager.GetString(Key) ?? SystemMessagesEnglish.ResourceManager.GetString(Key);
}
<#
XmlDocument xml = new XmlDocument();
xml.Load(Host.ResolvePath(@"ResourceStrings.resx"));
foreach(string key in xml.SelectNodes("root/data").Cast<XmlNode>().Select(xn => xn.Attributes["name"].Value)){
#>
public static string <#= key #> { get { return GetString("<#=key#>"); } }
<# } #>
}
}