Snitz MVC beta release

Snitz™ Forums 2000
https://forum.snitz.com/forumTopic/Posts/71070?pagenum=1
04 November 2025, 15:29

Topic


HuwR
Snitz MVC beta release
11 October 2015, 13:31


Well, finally I think it is ready for a beta release, so here it is smile (link at bottom of post.

Important

This is NOT a replacement for the classic ASP forum, you MUST have an existing Snitz Forums 2000 site. prerequisites
  1. Web server must support .Net Framework 4.5.1
  2. Database must be SQL Server (more to follow)

Installation

  • Download the zip file and extract it's contents to a folder on your local computer
  • Open the web.config file in the root folder, using a text editor
Change the values in green to match your forum setup
Code:

    <add name="SnitzConnectionString" connectionString="Data Source=SERVERNAME;Initial Catalog=DATABASE;UID=USERNAME;PWD=PASSWORD;" providerName="System.Data.SqlClient"/>
  • Open the snitz.config file in the root folder, using a text editor
do not change the lines highlighted red below
Code:

<?xml version="1.0" encoding="utf-8"?>
<appSettings>
<add key="boolRunSetup" value="1" /> <add key="boolDisablePosting" value="0" />
<add key="boolProhibitNewMembers" value="1" /> <add key="strForumDescription" value="Snitz&trade; Forums community support forum, Mvc version." />
<add key="strForumUrl" value="http://localhost:56654/" />
<add key="strForumTitle" value="Snitz Forums 2000 Mvc" />
<add key="strCookiePath" value="/" />

<add key="boolAllowSearchAllForums" value="1" />
<add key="strAnonMembers" value="Admin" />
<add key="strDateFormat" value="dd MMM yyyy" />
<add key="intTopicPageSize" value="25" />
<add key="intMemberPageSize" value="25" />
<add key="intSearchPageSize" value="20" />
<add key="boolShowAvatar" value="1" />
<add key="boolFullTextSearch" value="0" />If you have fulltext search enabled on your database, set this to 1 <!-- Not currently used -->
<add key="intPreferredPasswordLength" value="8" />
<add key="intMinimumNumericCharacters" value="1" />
<add key="boolDayLightSavingAdjust" value="1" />
<add key="strTimeZone" value="GMT Standard Time" />
</appSettings>
  • Upload all the files to a new folder in your website.
  • Make this folder an application under iis and make sure it has a .net 4.5 compatable application pool
  • Navigate to the newly create applications url
  • Login using an existin Snitz administrator account
  • Perform the upgrade
Thats it, you should be done, you can now start using the new interface for the forum.
If you want to redirect mobile traffic to the mvc site automatically, you will need to edit
the classic forums inc_header.asp and the code below at the very top of the file
Code:

    <%
dim u,b,v
set u=Request.ServerVariables("HTTP_USER_AGENT")
set b=new RegExp
set v=new RegExp
b.Pattern="(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino|android|ipad|playbook|silk"
v.Pattern="1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg( 13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-"
b.IgnoreCase=true
v.IgnoreCase=true
b.Global=true
v.Global=true
if b.test(u) or v.test(Left(u,4)) then response.redirect("http://forum.snitz.com/mvc") end if
%>

Download link
/mvc/Home/download/?filename=SnitzMvc_1.0.1b.zip

 

Replies ...


HuwR
11 October 2015, 13:57


Please note this is a release version to install on a web server, it does not contain the source code
blackinwhite
13 October 2015, 02:01


thanks for sharing. I'll give it a try.
blackinwhite
14 October 2015, 04:29


I tried to install it as you described and I'm getting the error below, unfortunately.
An item with the same key has already been added.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentException: An item with the same key has already been added.
HuwR
14 October 2015, 04:32


Originally posted by blackinwhite
I tried to install it as you described and I'm getting the error below, unfortunately.
An item with the same key has already been added.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentException: An item with the same key has already been added.

At what point do you get the error?
blackinwhite
14 October 2015, 04:53


- I have downloaded the script. - Changed the web.config as advised (to point to SQL server)
- run /mvc page.
then it gives the error.
HuwR
14 October 2015, 05:25


Ok, sounds like a config error, could you post a copy of your web.config and snitz.config files (remove any db/sensitive info first)
blackinwhite
14 October 2015, 06:07


Sure,

snitz.config

Code:
<?xml version="1.0" encoding="utf-8"?>
<appSettings>
<add key="boolRunSetup" value="1" />
<add key="boolDisablePosting" value="0" />
<add key="boolProhibitNewMembers" value="1" />
<add key="strForumDescription" value="Snitz&amp;trade; Forums community support forum, Mvc version." />
<add key="strForumUrl" value="http://localhost/snitz/mvc" />
<add key="strForumTitle" value="Snitz Forums 2000 Mvc" />
<add key="strCookiePath" value="/" />

<add key="boolAllowSearchAllForums" value="1" />
<add key="strAnonMembers" value="Admin" />
<add key="strDateFormat" value="dd MMM yyyy" />
<add key="intTopicPageSize" value="25" />
<add key="intMemberPageSize" value="25" />
<add key="intSearchPageSize" value="20" />
<add key="boolShowAvatar" value="1" />
<add key="boolFullTextSearch" value="0" />
<!-- Not currently used -->
<add key="intPreferredPasswordLength" value="8" />
<add key="intMinimumNumericCharacters" value="1" />
<add key="boolDayLightSavingAdjust" value="1" />
<add key="strTimeZone" value="GMT Standard Time" />
</appSettings>

web.config
Code:
<?xml version="1.0"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
<sectionGroup name="dotNetOpenAuth" type="DotNetOpenAuth.Configuration.DotNetOpenAuthSection, DotNetOpenAuth.Core">
<section name="messaging" type="DotNetOpenAuth.Configuration.MessagingElement, DotNetOpenAuth.Core" requirePermission="false" allowLocation="true"/>
<section name="reporting" type="DotNetOpenAuth.Configuration.ReportingElement, DotNetOpenAuth.Core" requirePermission="false" allowLocation="true"/>
<section name="openid" type="DotNetOpenAuth.Configuration.OpenIdElement, DotNetOpenAuth.OpenId" requirePermission="false" allowLocation="true"/>
<section name="oauth" type="DotNetOpenAuth.Configuration.OAuthElement, DotNetOpenAuth.OAuth" requirePermission="false" allowLocation="true"/>
</sectionGroup>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
</configSections>
<connectionStrings>
<add name="SnitzConnectionString" connectionString="Data Source=SERVERNAME;Initial Catalog=DATABASE;UID=USERNAME;PWD=PASSWORD;" providerName="System.Data.SqlClient"/>
</connectionStrings>
<appSettings file="snitz.config">
<add key="webpages:Version" value="2.0.0.0"/>
<add key="webpages:Enabled" value="false"/>
<add key="PreserveLoginUrl" value="true"/>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
<system.net>
<mailSettings>
<smtp from="no-reply@domain.com">
<network host="MAILSERVER" password="PASSWORD" port="25" userName="USERNAME"/>
</smtp>
</mailSettings>
</system.net>
<!--
For a description of web.config changes for .NET 4.5 see http://go.microsoft.com/fwlink/?LinkId=235367.
The following attributes can be set on the <httpRuntime> tag. <system.Web>
<httpRuntime targetFramework="4.5" />
</system.Web>
-->
<system.web>
<compilation targetFramework="4.5.1"/>
<httpRuntime targetFramework="4.5.1"/>
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880"/>
</authentication>
<httpModules>
<add name="OnlineActiveUsers" type="OnlineActiveUsers.OnlineUsersModule"/>
</httpModules>
<httpHandlers>
<!--<add verb="*" path="*WebSiteThumbnailHandler.ashx" type="GetWebSiteThumb.WebSiteThumbnailHandler" />-->
</httpHandlers>
<pages>
<namespaces>
<add namespace="System.Web.Helpers"/>
<add namespace="System.Web.Mvc"/>
<add namespace="System.Web.Mvc.Ajax"/>
<add namespace="System.Web.Mvc.Html"/>
<add namespace="System.Web.Optimization"/>
<add namespace="System.Web.Routing"/>
<add namespace="System.Web.WebPages"/>
</namespaces>
</pages>
<roleManager enabled="true" defaultProvider="SimpleRoleProvider">
<providers>
<clear/>
<add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
</providers>
</roleManager>
<membership defaultProvider="SimpleMembershipProvider">
<providers>
<clear/>
<add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData"/>
</providers>
</membership>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules>
<add name="OnlineActiveUsers" type="OnlineActiveUsers.OnlineUsersModule"/>
</modules>
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit"/>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit"/>
<remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0"/>
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0"/>
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
<!--<add name="WebSiteThumbnailHandler" path="*WebSiteThumbnailHandler.ashx" verb="*" type="GetWebSiteThumb.WebSiteThumbnailHandler" />-->
</handlers>
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.1"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="DotNetOpenAuth.OpenId" publicKeyToken="2780ccd10d57b246" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="DotNetOpenAuth.OpenId.RelyingParty" publicKeyToken="2780ccd10d57b246" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="DotNetOpenAuth.OAuth" publicKeyToken="2780ccd10d57b246" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="DotNetOpenAuth.OAuth.Consumer" publicKeyToken="2780ccd10d57b246" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"/>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
</providers>
</entityFramework>
<system.net>
<defaultProxy enabled="true"/>
<settings>
<!-- This setting causes .NET to check certificate revocation lists (CRL)
before trusting HTTPS certificates. But this setting tends to not
be allowed in shared hosting environments. -->
<!--<servicePointManager checkCertificateRevocationList="true"/>-->
</settings>
</system.net>
<dotNetOpenAuth>
<messaging>
<untrustedWebRequest>
<whitelistHosts>
<!-- Uncomment to enable communication with localhost (should generally not activate in production!) -->
<!--<add name="localhost" />-->
</whitelistHosts>
</untrustedWebRequest>
</messaging>
<!-- Allow DotNetOpenAuth to publish usage statistics to library authors to improve the library. -->
<reporting enabled="true"/>
<!-- This is an optional configuration section where aspects of dotnetopenauth can be customized. -->
<!-- For a complete set of configuration options see http://www.dotnetopenauth.net/developers/code-snippets/configuration-options/ -->
<openid>
<relyingParty>
<security requireSsl="false">
<!-- Uncomment the trustedProviders tag if your relying party should only accept positive assertions from a closed set of OpenID Providers. -->
<!--<trustedProviders rejectAssertionsFromUntrustedProviders="true">
<add endpoint="https://www.google.com/accounts/o8/ud" />
</trustedProviders>-->
</security>
<behaviors>
<!-- The following OPTIONAL behavior allows RPs to use SREG only, but be compatible
with OPs that use Attribute Exchange (in various formats). -->
<add type="DotNetOpenAuth.OpenId.RelyingParty.Behaviors.AXFetchAsSregTransform, DotNetOpenAuth.OpenId.RelyingParty"/>
</behaviors>
</relyingParty>
</openid>
</dotNetOpenAuth>
<uri>
<!-- The uri section is necessary to turn on .NET 3.5 support for IDN (international domain names),
which is necessary for OpenID urls with unicode characters in the domain/host name. It is also required to put the Uri class into RFC 3986 escaping mode, which OpenID and OAuth require. -->
<idn enabled="All"/>
<iriParsing enabled="true"/>
</uri>
</configuration>
HuwR
14 October 2015, 07:47


can't see anything obvious. In the web.config could you change this line
<compilation targetFramework="4.5.1" />
to this
<compilation debug="true" targetFramework="4.5.1" />

first entry under system.web

That may give some more information about where it went wrong
Doughnut
18 October 2015, 10:21


So you can't try this as any kind of stand alone yet, I'd need to the old snitz stuff then lay this over the top?
Cheers.
HuwR
18 October 2015, 11:57


Not yet no, as there is no admin functionality so you can't create forums etc etc
Doughnut
19 October 2015, 06:08


No worries,thought I might be able test it out :)
HuwR
19 October 2015, 07:10


Originally posted by Doughnut
No worries,thought I might be able test it out :)
Sent you an email
Doughnut
19 October 2015, 08:55


Didn't get any, [email link removed and email sent]
HuwR
19 October 2015, 09:01


Originally posted by Doughnut
Didn't get any, [email link removed and email sent]
Sent another email smile
HuwR
19 October 2015, 09:42


Originally posted by Doughnut
Didn't get any, [email link removed and email sent]
That's odd, mail server said it sent the email to your Hotmail account, so Hotmail must have done something to it.
HuwR
20 October 2015, 11:54


Just working on a few issues that Doughnut has found while testing my clean install, mvc version not respecting some of the classic versions config settings. Should have these ironed out shortly and will post a new beta version probably at the weekend.
HuwR
23 October 2015, 15:48


New beta posted. A few minor fixes + added login sync between ASP and MVC versions

Download link
/mvc/Home/download/?filename=SnitzMvc_1.0.1b.zip
Explosion
11 April 2017, 09:46


Hello,

I see no more update since 2015 for this version.
Is the project died?
HuwR
11 April 2017, 10:30


No, it is almost finished, we are currently in the final stages of testing before release. You can take a look at progress here https://www.reddick.co.uk/mvc (that is the latest test build)

Release is imminent, probably beginning of May
HuwR
12 April 2017, 03:16


You can also access this forum via mvc interface https://forum.snitz.com/mvc
Explosion
13 April 2017, 03:27


It's a good news! I see missing language translation as !*labels.lblCategories*!
HuwR
13 April 2017, 10:39


Originally posted by Explosion
It's a good news! I see missing language translation as !*labels.lblCategories*!
on which link, and which language?
Explosion
13 April 2017, 18:17


Just in forum home :)

http://pasteboard.co/3Y2EbC6vZ.png
HuwR
14 April 2017, 02:41


Originally posted by Explosion
Just in forum home :)

http://pasteboard.co/3Y2EbC6vZ.png
Thanks, I will look into that, I'm guessing that your browser is set to a language not currently translated and has not defaulted to English correctly.
HuwR
14 April 2017, 09:15


If you would like to create an Italian translation, the instructions can be found here ..
https://www.reddick.co.uk/Mvc/Topic/Posts/846
Explosion
18 April 2017, 04:25


Hi HuwR,
are they the final language strings? How do you think to manage updates (of project and language strings)? Is there a public git repository to contribute?
HuwR
18 April 2017, 07:17


They are not complete as I hve not yet extracted all the admin strings, but they are all the member facing strings (well probably about 99% smile)

There isn't a repository as yet, I will sort that out once I have got the release out of the way smile
Explosion
18 April 2017, 09:37


Hi,
I think it's important to use a format/pattern for translation files allowing to easily maintain the translations for the future updates/variations and to track changes. A csv file, doesn't appear me a great solution to be managed..
HuwR
18 April 2017, 09:45


if you can think of a better way of bulk uploading and inserting data into sql from a web site, I'm all ears.
Individual strings aren't n issue as the forum comes with it's own resource manager. it is more for adding a whole set of langauge strings that the csv is for, I thought about xml, but most 'normal' people would run a mile if presented with an xml file
Explosion
20 April 2017, 17:22


Hi HuwR
I think could be a better solution use a more static solution to load languages string. So, without load strings in the database and retrieve them each time, I think could be more effective load them directly from a linguage file and use a file format more used for translations as XLIFF ( having editors support ). I think should be fine a approach like Wordpress...
HuwR
21 April 2017, 02:28


Originally posted by Explosion
Hi HuwR
I think could be a better solution use a more static solution to load languages string. So, without load strings in the database and retrieve them each time, I think could be more effective load them directly from a linguage file and use a file format more used for translations as XLIFF ( having editors support ). I think should be fine a approach like Wordpress...

I will look into it, I implemented the language resource module as an interface so it would be fairly easy to code a different provider source.

However the language strings are cached , they are not retrieved from the database on every request
© 2000-2021 Snitz™ Communications