diff --git a/dlls/mshtml/omnavigator.c b/dlls/mshtml/omnavigator.c
index b4b5c15..73e55dd 100644
--- a/dlls/mshtml/omnavigator.c
+++ b/dlls/mshtml/omnavigator.c
@@ -621,25 +621,57 @@
     return *p ? S_OK : E_OUTOFMEMORY;
 }
 
+static HRESULT get_language_string(LCID lcid, BSTR *p)
+{
+    BSTR ret;
+    int len;
+
+    len = LCIDToLocaleName(lcid, NULL, 0, 0);
+    if(!len) {
+        WARN("LCIDToLocaleName failed: %u\n", GetLastError());
+        return E_FAIL;
+    }
+
+    ret = SysAllocStringLen(NULL, len-1);
+    if(!ret)
+        return E_OUTOFMEMORY;
+
+    len = LCIDToLocaleName(lcid, ret, len, 0);
+    if(!len) {
+        WARN("LCIDToLocaleName failed: %u\n", GetLastError());
+        SysFreeString(ret);
+        return E_FAIL;
+    }
+
+    *p = ret;
+    return S_OK;
+}
+
 static HRESULT WINAPI OmNavigator_get_systemLanguage(IOmNavigator *iface, BSTR *p)
 {
     OmNavigator *This = impl_from_IOmNavigator(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%p)\n", This, p);
+
+    return get_language_string(LOCALE_SYSTEM_DEFAULT, p);
 }
 
 static HRESULT WINAPI OmNavigator_get_browserLanguage(IOmNavigator *iface, BSTR *p)
 {
     OmNavigator *This = impl_from_IOmNavigator(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%p)\n", This, p);
+
+    return get_language_string(GetUserDefaultUILanguage(), p);
 }
 
 static HRESULT WINAPI OmNavigator_get_userLanguage(IOmNavigator *iface, BSTR *p)
 {
     OmNavigator *This = impl_from_IOmNavigator(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%p)\n", This, p);
+
+    return get_language_string(LOCALE_USER_DEFAULT, p);
 }
 
 static HRESULT WINAPI OmNavigator_get_platform(IOmNavigator *iface, BSTR *p)
