It is working correctly.
Accordingly, GetGlobalResourceObject(resourceFile, s.SettingName) does not come back as null (I checked in the debugger) but with the resourceValue and assigns that to the label.
Yes, that is how it is supposed to work, the value is the translated label s.SettingName is the key not the label itself, the value that comes back from the resource file is the label for the current language (determined by the ui culture of the executing thread)
For example you would have the resource file MyResource.resx which is English, if you want to translate it to French you would create a new resource file named MyResource.fr.resx, then if the thread is executing as French it will get the value from that file assuming the file exists and the key and value exist in the file, otherwise it will fall back to English and get the value from MyResource.resx. so the translations for each language are in different .resx files and which one to use is determined by the thread ui culture.
By default the thread ui culture is determined by the user's language preference in their web browser unless the site is configured to use a specific language.
For example, a setting named "WmsUrl" appears in the resource file under the key "WmsUrl" with the value "http://62.197.41.154:8080/geoserver/SHINE/wms?service=WMS"
That isn't the kind of thing that should be put in a resource file, resource files are for strings used on labels and buttons, not for other things. That seems more like something you would set for the default value of the setting not something used for the label for the setting.
Hope that clears it up for you, it is definitely working correctly, all the setting labels for features included in mojoPortal have been translated into many languages and it works fine.
Best,
Joe