Author |
Topic |
tutzauer
Starting Member
Panama
28 Posts |
Posted - 03 March 2002 : 22:09:12
|
I'm new with the international version of snitz. So, if my questions/suggestions are off base, please forgive.
It seems to me that the present version of snitz international does not support translated titles for CATEGORIES or FORUMS. My superficial check leads me to believe that these items are contained in the following fields of the db:
snitz_forums_2000.mdb -> FORUM_CATEGORY -> CAT_NAME snitz_forums_2000.mdb -> FORUM_FORUM -> F_SUBJECT
If this is correct, it seems that in order to translate the titles modifications must be made to the db.
1. Closed ended solution
Add a field FORUM_CATEGORY -> CAT_ALT_NAME Add a field FORUM_FORUM -> F_ALT_SUBJECT Add code to allow for the ALTERNATE titles to be added or in the event that they are not added the default language titles will be used. Update related program display code.
2. Open ended solution
Add a table linked to FORUM_CATEGORY -> CAT_ID with fields CAT_ID, LANGUAGE_CODE, CAT_NAME
Add a table linked to FORUM_FORUM -> FORUM_ID with fields FORUM_ID, LANGUAGE_CODE, F_SUBJECT
Add code to allow for the ALTERNATE titles BASED ON LANGUAGE CODES to be added or in the event that they are not added the default language titles will be used.
Update related SQLs and program display code.
Solution 1 might conflict with DD3. Solution 2 might conflict with DD3 and DD4.
3) Design decision: Do not use the database - as this would mean another DB hit and RS, a thing that we suffer from. 4) Design decision: Most of the users will use it in one language, some will use in two. There can be cases where more languages are needed but lets leave them out
The data in question is relatively small and probable could be stored in variables to avoid multiple hits on the db.
One technique that I have found useful for this sort of storage is to create on start-up a frame with a blank page. This can be 1px in width or height at the top/bottom or left/right of the display. This frame never displays any code. It is never reloaded and it only contains variables and their respective values and functions when appropriate. These data and functions can be read/updated and called from any other frame.
The up side is that a large amount of data can be saved in these arrays/variables without resorting to cookies or application variables. The down side is that frames have to be employed.
I feel that the end-user of a forum would like to have the Category and Forum titles displayed in his chosen language as well as the program text. If he did not understand the default language, it would allow him to find topics in his language where he could read posts, in his language. Otherwise he would have to translate for himself the titles or read all of the posts in his language do try to discover which titles were of interest.
Comments, please.
Jack Tutzauer< |
|
Deleted
deleted
4116 Posts |
Posted - 03 March 2002 : 22:32:14
|
Good idea . See here before we talk further: http://www.istanbulmuzesi.org/forum
The whole site is Snitz driven and has support for N languages. Changes: * Enlarged text fields * New ighlevel function to filter-output data, ASP code changed to call this whenever required. * Defined new forum tags (like [1033] and [/1033]) to display that data whenever LCID=1033
I plan to release this as a MOD after v4.0final is out. It will degrade performance for non-multi language users.
Think PinkPost v40b03 Patches< |
|
|
tutzauer
Starting Member
Panama
28 Posts |
Posted - 04 March 2002 : 02:16:15
|
I finally got http://www.istanbulmuzesi.org/ to answer. I've been trying for a couple of days. It's a tough connection from Panam to that server for some reason. The data came at a fair rate and then stoped for a long time..like a gateway went down and it has to find another route. Anyway I eventually got the pages....and it was worth the wait.
The site is doing exactly what I was talking about...and more. Translating the forum comments was a good idea too.
I can read the .js files but the .asp files have already been processed by that server before I receive them. So, I don't know what the original code was.
I don't know/understand where or how the <1033></1033> tags are defined.
When the administrator adds a Category or Forum how is the alt language title input? Is it hard coded into a file?
Seems to me that it should be handled by the db. If the Cagegory_ID is 1 and Language is not 1033 (or whatever default) grab alt title for catid 1 or (the open way) if the Category_ID is 1 and LCID=1034 grab alt_title from alt_title_table where CatID = 1 and LCID = 1034, if no record returned use title for CatID = 1 and default language (the administrator did enter a title for 1034 use the default title)
I would say two languages is enough. For multi-language add one field to relative tables for the alternate language title and one for the alternate description and add form fields for alternate titles and descriptions where new cats/forums are added/edited. With only two languages there is no need to track the LCID number. It's either default or alternate. The actual text is typed in by the admistrator. It's in the db not file to include.
Make sure the new db fields are in the queries.
The other code changes should also be relatatively simple. Once the user selects a language from the drop down, you set an Alt_lang variable either true or false. Then in each output you test it to see which text field to display. If it is alternate language test to see if the value is blank. If so use the default. Add a couple of new input fields in the add/edit pages and you're done.
If you use frames, you can load all that titles/descriptions information in arrays, all the language variables, etc in one frame..one hit on the db..one load of those big language files. Then you can call the variables with code like <%=parent.frame_name.variable_name%> or response.write.
With a little forethought you could probable load all the information for both languages and switch from one to the other with an if statement.
For support for N languages, new tables would have to be created. I think this involves too many code changes and db changes at this time.
Istanbul Forums are great stuff!
Jack Tutzauer< |
|
|
Deleted
deleted
4116 Posts |
Posted - 04 March 2002 : 07:31:07
|
quote:
I finally got http://www.istanbulmuzesi.org/ to answer. I've been trying for a couple of days. It's a tough connection from Panam to that server for some reason. The data came at a fair rate and then stoped for a long time..like a gateway went down and it has to find another route. Anyway I eventually got the pages....and it was worth the wait.
Strange. The server is in US - same continent at least ...
quote:
The site is doing exactly what I was talking about...and more. Translating the forum comments was a good idea too.
I can read the .js files but the .asp files have already been processed by that server before I receive them. So, I don't know what the original code was.
This is the good side of ASP . Give me some time to cut-paste some examples from the code. I don't want to make it public before v4.0f, because I will not have the time to support it.
quote:
I don't know/understand where or how the <1033></1033> tags are defined.
They are defined just like the others, like [ b ] [ /b ]. I added a line to the code which deals with forum code, which calls the sub I mentioned. That sub checks the current LCID value of the user, and keeps/shows any data tagged with that LCID value (btw, 1033 is the LCID of English), and strips out the others.
quote:
When the administrator adds a Category or Forum how is the alt language title input? Is it hard coded into a file?
No. For example he/she enters to the form field:
[1033]Test Forum[/1033][1055]Deneme Forumu[/1055]
You see why we have to change the size of the fields? That info is kept in the DB ofcourse.
quote:
Seems to me that it should be handled by the db. If the Cagegory_ID is 1 and Language is not 1033 (or whatever default) grab alt title for catid 1 or (the open way) if the Category_ID is 1 and LCID=1034 grab alt_title from alt_title_table where CatID = 1 and LCID = 1034, if no record returned use title for CatID = 1 and default language (the administrator did enter a title for 1034 use the default title)
I would say two languages is enough. For multi-language add one field to relative tables for the alternate language title and one for the alternate description and add form fields for alternate titles and descriptions where new cats/forums are added/edited. With only two languages there is no need to track the LCID number. It's either default or alternate. The actual text is typed in by the admistrator. It's in the db not file to include.
Make sure the new db fields are in the queries.
The other code changes should also be relatatively simple. Once the user selects a language from the drop down, you set an Alt_lang variable either true or false. Then in each output you test it to see which text field to display. If it is alternate language test to see if the value is blank. If so use the default. Add a couple of new input fields in the add/edit pages and you're done.
If you use frames, you can load all that titles/descriptions information in arrays, all the language variables, etc in one frame..one hit on the db..one load of those big language files. Then you can call the variables with code like <%=parent.frame_name.variable_name%> or response.write.
With a little forethought you could probable load all the information for both languages and switch from one to the other with an if statement.
For support for N languages, new tables would have to be created. I think this involves too many code changes and db changes at this time.
I know that this can be done also, but the way I did it is much more natural for Snitz Forums 2000. This method also has its own limitations ofcourse.
quote:
Istanbul Forums are great stuff!
Thank you .
Think PinkPost v40b03 Patches
Edited by - bozden on 04 March 2002 07:53:41< |
|
|
tutzauer
Starting Member
Panama
28 Posts |
Posted - 04 March 2002 : 10:05:11
|
I know that this can be done also, but the way I did it is much more natural for Snitz Forums 2000. This method also has its own limitations of course. ========= Enough said... your stuff works and you are much more familiar with Snitz Forums 2000 than I.
I can try to take a look at storing the variables for the system text display in a 'static' page in another frame where they can be used by the Snitz pages without including the langxxxx.asp file. I don't know without testing but my gut feeling is that it would eliminate most of the overhead for the additional language with the exception of the one-time loading of the variables into the 'static' page.
Implementation of the frames does not impact on Snitz Forums 2000.
<!-- frames --> <frameset rows="1,*"> <frame name="upper" src="blank.asp" marginwidth="0" marginheight="0" scrolling="no" frameborder="0"> <frame name="lower" src="default.asp" marginwidth="0" marginheight="0" scrolling="auto" frameborder="0"> </frameset>
It adds a 1px blank line at the top of the screen. Actually 0px will work but '0' is considered an illegal value.
The file 'blank.asp' in frame 'upper' is the 'static' page where the variables could be loaded.
Since there is already a test in the language file, maybe just including the files into the 'upper' page would work.
<!--#INCLUDE FILE="Lang1055.asp" --> <!--#INCLUDE FILE="Lang1034.asp" -->
The variable calls would have to be changed (find and replace) from strLangActive00010 to parent.upper.strLangActive00010.
I'm just brainstorming here. I may be way off base.
Please, let me know if you think that this idea is worth further investigation
Jack Tutzauer< |
|
|
Deleted
deleted
4116 Posts |
Posted - 04 March 2002 : 11:39:39
|
Am I missing something or do you suggest a JavaScript solution?
Btw, with the advent of ASP and server side includes, most of the designers get rid of their frames. Frames are not the default or best way of implementing Snitz. If I ever have to use frames (a menu + logo / banner at the top for example), I'd compile a language file which only includes those strings in the top frame, but leave everything the same in the main frame.
At the very beginning, istanbulmuzesi.org site was designed to use frames (top+menu+main), but after some time I just get rid of them. The change took more than full 15 days. You did count some of the reasons.
Think PinkPost v40b03 Patches< |
|
|
Nathan
Help Moderator
USA
7664 Posts |
Posted - 04 March 2002 : 12:06:36
|
Bozden, does your system adjust for the instance that an admin forgets one language? *I was thinking about an XML solution to internationalize the smilie mod, but this might work better anyway.
Nathan Bales - Romans 15:13 --------------------------------- Snitz Exchange | Mod Resource< |
|
|
tutzauer
Starting Member
Panama
28 Posts |
Posted - 04 March 2002 : 12:52:09
|
===== Am I missing something or do you suggest a JavaScript solution? ===== Since Snitz Forums 2000 pages runs in an ASP server, I don't think JavaScript should be required.
===== Btw, with the advent of ASP and server side includes, most of the designers get rid of their frames. Frames are not the default or best way of implementing Snitz. =====
Understood. However, I have worked on sites where the back-end application would only accept an .HTM file .ASP was not an option. Also I have used providers (before ASP) that had SSI turned off. With Snitz Forums 2000 neither of the above is a problem.
===== If I ever have to use frames (a menu + logo / banner at the top for example), I'd compile a language file which only includes those strings in the top frame, but leave everything the same in the main frame. =====
I think that we are on the same sheet of music here. Although, I don't know what you mean by 'compile a language file'. Except the top would only be used to store language information not to display anything.
===== At the very beginning, istanbulmuzesi.org site was designed to use frames (top+menu+main), but after some time I just get rid of them. The change took more than full 15 days. You did count some of the reasons. =====
There are a lot of good reasons to not use frames (15 days to back them out is a very good one). In fact the only realy good reason, that I can see, to use them it for an unchanging place to store program information in order to make it available to ALL pages in a site without having to reload or recalculate it. Cookies have a limit; DBs create a server-side load, SSIs can cause a page load delay.
It seems to me that the bottom line is does the use of frames (which cause delays themselves) increase the overall effeciency of a site and warrant the programming effort to use them.
For me the istanbulmuzesi.org solution is perfect. I don't have enough users to worry about the load.
I am interested in info on compiling ASP pages. I would appreciate some links.
I appreciate your time in answering my posts.
Thanks,
Jack Tutzauer< |
|
|
Deleted
deleted
4116 Posts |
Posted - 04 March 2002 : 15:44:58
|
quote:
Bozden, does your system adjust for the instance that an admin forgets one language? *I was thinking about an XML solution to internationalize the smilie mod, but this might work better anyway.
Not yet. But it is not so difficult to change the behaviour. There may be a couple of solutions (assume current_user_LCID is NNNN):
alternative-1
If the string has [NNNN]bla bla[/NNNN] then it is shown else nothing is shown (appears empty) end if
alternative-2
If the string has [NNNN]bla bla[/NNNN] then it is shown else the content is shown as is end if
alternative-3
If the string has [NNNN]bla bla[/NNNN] then it is shown else "No translation yet" is output in the correct language end if
alternative-4
If the string has [NNNN]bla bla[/NNNN] then it is shown else the item is not shown at all (so a category will not be shown for example) end if
I currently use a mixture of 2 and 3: I include tags for both languages but in case I do not provide English version I write "no translation there"... For Example for a post:
[1055].... Türkçe (a long Turkish paragraph) ... [/1055][1033]No translation yet[/1033]
With the last alternative, one needs to change the Snitz code a lot...
Think PinkPost v40b03 Patches< |
|
|
Deleted
deleted
4116 Posts |
Posted - 04 March 2002 : 16:06:55
|
quote:
===== Am I missing something or do you suggest a JavaScript solution? ===== Since Snitz Forums 2000 pages runs in an ASP server, I don't think JavaScript should be required.
...
I think that we are on the same sheet of music here. Although, I don't know what you mean by 'compile a language file'. Except the top would only be used to store language information not to display anything.
How do you access the objects of another frame (a user side thing) through ASP (a server executed code)? The only solution I know is to use JavaScript code which writes to a cookie and let the ASP read this after a refresh (I want to keep on learning ).
We actually think of a semi-JS solution in the future, where the LangNNNN.js files are processed by the client instead of the server. The language file will be downloaded once, and will be used from the cache.
quote:
I am interested in info on compiling ASP pages. I would appreciate some links.
I don't know any, just did a search after your question and found this: http://www.newobjects.com/prodct/Category/61
I don't like these special solutions as they can leave you alone in the future.
Think PinkPost v40b03 Patches< |
|
|
tutzauer
Starting Member
Panama
28 Posts |
Posted - 05 March 2002 : 12:25:01
|
Thanks for the link. I agree with you. I'm really not that interested in compiled ASP ... just curious.
===== How do you access the objects of another frame (a user side thing) through ASP (a server executed code)? The only solution I know is to use JavaScript code which writes to a cookie and let the ASP read this after a refresh (I want to keep on learning ). =====
Remember, that when the ASP server is finished it hands over an HTML page for the browser where client-side HTML, XML, Scripts, etc are executed.
So, it's a client-side thing. It is like accessing objects in the same page, except you have to point to the other frame... x = parent.frame_name.object_name instead of x = object_name. (the exact syntax varies between JavaScript and VBScript and the type of object, etc.)
It's similar to '../' in moving around with relative web addressing. Parent is similar to '../' It move you up one level. parent.frame_name is similar to ../Directory_name. parent.frame_name.object_name is similar to ../directory_name/file_name.
I don't think there is much difference between JavaScript and VBScript.
<script>var myVariable = parent.frame_name.frame_variable</script> <%myVariable = parent.frame_name.frame_variable%> <%=parent.frame_name.frame_variable%>
BTW, since the ASP server gets the page first, you can fool the JavaScript a bit... <script> var myJavaScriptVariable = <%=myVBScriptVariable%> </script>
Take it to the next level (frames) <script> var myJavaScriptVariable = <%=parent.frame_name_myVBScriptVariable%> </script>
If the file (say blank.asp) in frame parent.frame_name is never re-loaded, then all the variables/objects in it are always in the cache.
One page in the application (snitz) can also write new variable into that other frame page (blank.asp) for use by other application (snitz) pages...whether or not the end-user has cookies enabled.
down side: with cookies, when the user exits and reenters the site the values in the cookies are still available. With the frames if a user leaves and reenters the site, the values in the (blank.asp) page must be re-loaded/re-calculated. In sites where the user can bookmark internal pages code must be included to make sure 'balnk.asp' data are in place. With Snitz Forums 2000 this would not be a problem, since the user must login, i.e. one single entry point where all the setup is done. ===== We actually think of a semi-JS solution in the future, where the LangNNNN.js files are processed by the client instead of the server. The language file will be downloaded once, and will be used from the cache. ===== Exactly! You say put this type of code in each application page as needed.
<script language="JavaScript1.2" src="scripts/langNNNN.js"></script>
so that the data will be put in a cache.
I say put this type of code in a invisible frame page.
<!--#INCLUDE FILE="langXXXX.asp" --> <!--#INCLUDE FILE="langNNNN.asp" --> <!--#INCLUDE FILE="anything_else.asp" -->
So that the data will be put in a 'static' place where you can read as well write. Again, the down side is that you have to use frames. The up side is that you can put anything that you want in that frame and it will be available for any page in your application.
REAL WORLD EXAMPLE: An ebanking back-end uses two frames The ebanking back-end generates an HTML formatted table of menu/submenu items. This table is displayed in a menu/sub menu frame (say frame 1).
A bank does not want the menu items and submenu item on the same page. The bank wants only menu items in the menu page. When a user click on a menu item the bank wants the sub menu items output as links on a page in the second ebank frame.
Solution: Create a third frame. The third frame captures the HTML formatted output from the back-end in a JavaScript variable. A function breaks out menu data and stores them in arrays and breaks out submenu data and stores them in other arrays with indexes to the menu items.
The original first frame loads a page that has a function to read the raw menu data from the new frame and generate a page of only menu items as links.
When a menu link is clicked a submenu page is loaded into the second original frame with the menu index value as a parameter. The sub menu page executes a function which reads the submenu values for that menu index from the new frame and generates the appropriate HTML code of sub menu calls to back-end functions.
I guess this is what you would call a simi-js solution. An ASP solution could not be used in this case because the back-end would only execute in an HTML page with a specific name.
Jack Tutzauer< |
|
|
Deleted
deleted
4116 Posts |
Posted - 05 March 2002 : 16:56:56
|
The idea you are suggesting will unfortunately not work. Try and see.
Think PinkPost v40b03 Patches< |
|
|
n/a
deleted
593 Posts |
Posted - 05 March 2002 : 18:59:08
|
Since this topic deals with some of questions that I had about Snitz Forum in handling a multilingual environment, I like to pose a further question, if I may.
I am gald that this issue has been addressed...as the current international version set a global item such as header in a unique language but not forums/topics... (unless of course, you put all relevant languages in texts for each of Forum, Topic, etc. like I did)
I visited www.istanbulmuzesi.org/forum link corrected by bozden. This forum addresses one of my questions - handling language specific forum by a designated language selection. Very nice and glad this feature will be added in MOD. At the same time, I believe this forum maintain the exact same contents across languages - although I couldn't read Turkish, I counted each Forum, Topic numbers and sort of visited some sample pages, and see them the same in both Enlgish and Turkish.
My another question is whether a forum will be designed to handle different contnets per languge..and perhaps this will have to do with a db architecture - whether you will allow a language specific db (localized DB) - to allow different forums/topics coexit in the multilingual enviornment.. or strictly same category/same forums/same topics across languages...and allow multiple language posts exist in a forum....
I have been testing EN/JA (plus some other langs) enviornment, one of the problems I sense beyond FORUM/TOPIC localization issue, is showing multiple language posts simultaneously is also a problem down to a level of posts in a topic...(meaning, a language A user may not really care to see/read all other posts in different languages included, unless of course, they are respectively translated in that particular language used.)
Will there be some filtering features for, let's say, any new Forum, Topic, or posts created in a particular language input mode, will be showing up only in that language or will show up across different langugue Forum?? I guess this requires a bit of redesigning DB architecture itself if to be done... Is there any sort/filter capability considered to address this? Perhaps this can defined as a global setting option in setting up a multilingual Snitz Forum....(sorry no sample codes - am not that good).. Or should this be placed as an "future enhancement" request item, if not considered?
Thanks, leorat
Edited by - bozden on 05 March 2002 19:31:31< |
|
|
Deleted
deleted
4116 Posts |
Posted - 05 March 2002 : 19:43:41
|
This can be done with the alternative-4 I mentioned above. This would not reuire DB changes but a lot of changes in ASP code. The code must scan the data to see if it is eligable to be shown in that language. Also this allows for different contents in different languages. Wht you want to say on the site (say through your content manager mod) can be a lot for your local users but can be few or completely different for others.
Another alternative would be to add one field to each entity (category, forum, post, reply, ...) with encoded info (1 bit per language) to control if it is to be shown in a particular language or not. Although this can be done with some work, the main problem is with the MODs you want to install. Therefore I decided to leave it where it is before v4 is out.
Think PinkPost v40b03 Patches< |
|
|
n/a
deleted
593 Posts |
Posted - 05 March 2002 : 22:50:06
|
quote:
This can be done with the alternative-4 I mentioned above. This would not reuire DB changes but a lot of changes in ASP code. The code must scan the data to see if it is eligable to be shown in that language. Also this allows for different contents in different languages. Wht you want to say on the site (say through your content manager mod) can be a lot for your local users but can be few or completely different for others.
Another alternative would be to add one field to each entity (category, forum, post, reply, ...) with encoded info (1 bit per language) to control if it is to be shown in a particular language or not. Although this can be done with some work, the main problem is with the MODs you want to install. Therefore I decided to leave it where it is before v4 is out.
Think PinkPost v40b03 Patches
Thanks for clarification and sounds real good. As an interim approach, I was working with setting up a language specific Forum..
leorat
< |
|
|
tutzauer
Starting Member
Panama
28 Posts |
Posted - 06 March 2002 : 11:04:04
|
Just a clarification on my earlier post.. Here is JavaScript code for an example where two frames are loaded in a controled order. The first, upper, contains a variable frameName. The second, lower, pops up an alert box which displays the value of the frameName variable in 'upper'. It then updates the value of frameName in 'upper' and pops up a second alert box that again read the variable in 'upper' and displays it.
The page in frame 'lower' then complets its load. And a line is written in the body section which displays the new value in the frameName variable in 'upper'.
I suppose the same thing can be done using VBScript
Load this file first: =================================== <!-- frames file: sample.asp --> <!-- make rows=1 and paint background the same as lower to hide --> <frameset rows="80,*" frameborder="yes"> <!-- (0) upper.asp (upper) --> <frame src="upper.asp" name="upper" id="upper" scrolling="NO" topmargin="0" leftmargin="0" marginwidth="0" marginheight="0" frameborder="NO"> <!-- (1) lower.asp (lower) --> <frame src="blank.asp" name="lower" id="lower" scrolling="Auto" marginwidth="0" marginheight="0" bordercolor="#FFFFFF" topmargin="0" leftmargin="0"> </frameset> =========================================
Here are the other three files: ========================================= <html> <!-- file: upper.asp --> <head> <title>Upper Frame</title> <!-- This section would hold all 'global' variables --> <script> //set a variable with the frame name as the value var frameName = "upper";
//Control the order of frame loading //to make sure variables are loaded //in upper before they are called in lower parent.lower.location = "lower.asp" </script> <BODY> <!-- This section would be empty --> <br>**This is the upper frame page**<br> It can be made invisible. </body> </html>
============================================== <html> <!-- file: blank.asp --> <head> <title>Blank page</title> </head> <body> <!-- This page is just a place holder. The application page is loaded by upper. --> </body> </html>
========================================= <html> <!-- file: lower.asp --> <head> <title>Lower Frame</title> <!-- This section reads and writes to upper --> <script language="JavaScript" type="text/javascript"> var frameName = "lower"; //Some variable calling syntax (by array) //alert(parent.frames[1].frameName); // 0=upper 1=lower //A different variable calling syntax (by name) //Read the variable in upper and display it. alert("upper frame name: " + parent.upper.frameName); //Update the variable in upper and display the new value. parent.upper.frameName = "New upper" alert("upper frame name: " + parent.upper.frameName); </script> </head> <body> <!-- This would be the application start-up page --> <br>**This is the lower frame page**<br> Write the new value of frameName here<hr> <script>document.write(parent.upper.frameName);</script> </body> </html>
Jack Tutzauer< |
|
|
Topic |
|
|
|