<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jtgill</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jtgill"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Jtgill"/>
	<updated>2026-08-13T05:19:06Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=121525</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=121525"/>
		<updated>2018-12-15T02:55:27Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: /* Future Work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
===Team Members===&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Hasham Mukhtar (hmukhta@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Abhilasha Saini (asaini4@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Reddy Aravind Karnam Ganesh (rkarnam@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=== Mentor ===&lt;br /&gt;
&lt;br /&gt;
Zhewei Hu (zhu6@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
&lt;br /&gt;
config/locales/&lt;br /&gt;
&lt;br /&gt;
* en.yml&lt;br /&gt;
&lt;br /&gt;
* hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
config/&lt;br /&gt;
&lt;br /&gt;
* routes.rb&lt;br /&gt;
* application.rb&lt;br /&gt;
&lt;br /&gt;
app/controllers/&lt;br /&gt;
* applcation_controller.rb&lt;br /&gt;
&lt;br /&gt;
Student View Files:&lt;br /&gt;
&lt;br /&gt;
* app/views/&lt;br /&gt;
** shared/&lt;br /&gt;
*** _navigation.html.erb&lt;br /&gt;
** sign_up_sheet/&lt;br /&gt;
*** _suggested_topic.html.erb&lt;br /&gt;
*** _table_header.html.erb&lt;br /&gt;
*** list.html.erb&lt;br /&gt;
** student_task/&lt;br /&gt;
*** list.html.erb&lt;br /&gt;
*** view.html.erb&lt;br /&gt;
*** _publishing_rights.html.erb&lt;br /&gt;
** student_teams/&lt;br /&gt;
*** edit.html.erb&lt;br /&gt;
*** view.html.erb&lt;br /&gt;
** submitted_content/&lt;br /&gt;
*** _hyperlink.html.erb&lt;br /&gt;
*** _main.html.erb&lt;br /&gt;
*** _self_review.html.erb&lt;br /&gt;
*** _submitted_files.html.erb&lt;br /&gt;
*** _title.html.erb&lt;br /&gt;
*** edit.html.erb&lt;br /&gt;
** grades/&lt;br /&gt;
*** view_my_scores.html.erb&lt;br /&gt;
*** view_team.html.erb&lt;br /&gt;
** student_review/&lt;br /&gt;
*** list.html.erb&lt;br /&gt;
*** _responses.html.erb&lt;br /&gt;
*** _set_dynamic_review.html.erb&lt;br /&gt;
** participants/&lt;br /&gt;
*** change_handle.html.erb&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
Currently Expertiza only supports the English language. Many students are from other countries. So, we aimed to allow them to view their pages in another language. This is done by internationalizing static strings in Expertiza for Student Assignment related pages to another language (ex: Hindi or Chinese). Students had the ability to change the language through a dropdown located in navigation bar at the top of the page. We did not affect any strings that are dynamically shown. We focused on adding the Hindi language as a lot of students are Indian.&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;br /&gt;
&lt;br /&gt;
===Technical Design===&lt;br /&gt;
&lt;br /&gt;
====Allowing Student to change language for Assignment Pages====&lt;br /&gt;
&lt;br /&gt;
* We added a dropdown in the navigation bar for a student to use&lt;br /&gt;
* They are able to choose from English or Hindi&lt;br /&gt;
* [[File: Internationalization Navigation dropdown 2.JPG]]&lt;br /&gt;
* When the language is clicked on it changed all the static strings in the Student Views related to Assignments to the newly selected language.&lt;br /&gt;
* Students could also manually change the language in the URL themselves by. The language is put before the page name. Example: www.example.com/en/book -&amp;gt; www.example.com/hi_IN/book&lt;br /&gt;
&lt;br /&gt;
====Adding Multi-Language Support====&lt;br /&gt;
&lt;br /&gt;
* For this project, we added support for one language, Hindi. &lt;br /&gt;
* We used Google Translate to convert the strings to Hindi.&lt;br /&gt;
* We used the [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works Rails Internationalization (I18n) API] to help us add multi language support.&lt;br /&gt;
* There are two &amp;lt;code&amp;gt;yml&amp;lt;/code&amp;gt; files in the &amp;lt;code&amp;gt;config/locales&amp;lt;/code&amp;gt; directory representing the different languages that can be used in Expertiza.&lt;br /&gt;
** One for English, which will be the default language used, and another for Hindi. &lt;br /&gt;
*** &amp;lt;code&amp;gt;en.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;hi_IN.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
** These &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files contained the translated strings for their respective language.&lt;br /&gt;
* We editied the &amp;lt;code&amp;gt;routes.rb, application.rb, application_controller.rb&amp;lt;/code&amp;gt; files and all the view files related to Student Assignments (which you can see at the top of the wiki) so that it can read from the &amp;lt;code&amp;gt;yml&amp;lt;/code&amp;gt; files to show other languages.&lt;br /&gt;
------------------------------&lt;br /&gt;
* &amp;lt;code&amp;gt;application.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
** We've added the following two lines in the Recaptcha module of this file:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    config.i18n.available_locales = [:en,:hi_IN]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* This tells the application all the available locale &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; files that are supported. If you wanted to add more language support, you can just add it to the list shown here.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    config.i18n.default_locale = :en&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* The sets the default language for the application. Which in this case is English.&lt;br /&gt;
----------------------------&lt;br /&gt;
* &amp;lt;code&amp;gt;application_controller.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
** We added the following to this file to get translations to work:&lt;br /&gt;
&amp;lt;code&amp;gt; &lt;br /&gt;
  before_action :set_locale &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* This will call the set_locale method&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def set_locale&lt;br /&gt;
    I18n.locale = params[:locale] || I18n.default_locale&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* This sets the locale (language to use) for the application. The locale is taken from the URL query params list. If none is given, then it defaults to our default locale file (which is English). The application will always default to English and it won't pull from params until another language is chosen from the dropdown and sets :locale to something else. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def default_url_options(options={})&lt;br /&gt;
    {locale: I18n.locale}.merge options&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* This makes the URL always have a locale, which is set in the set_locale method, in it. This way the user doesn't have to manually enter a locale in the URL to translate the page. However, it adds the locale to the end of the URL like this: www.example.com/book/?locale=en. This is not something we want as it doesn't look good. This is fixed with routes.rb&lt;br /&gt;
-----------------------------&lt;br /&gt;
* &amp;lt;code&amp;gt; routes.rb &amp;lt;/code&amp;gt;&lt;br /&gt;
** We wrapped the file in &amp;lt;code&amp;gt; routes.rb &amp;lt;/code&amp;gt; with a &amp;lt;code&amp;gt;scope:&amp;lt;/code&amp;gt; so that the locale can be added before the page name in the URL. Something like this: www.example.com/en/book&lt;br /&gt;
** [[File:Internationalization Route rb 2.JPG]]&lt;br /&gt;
*** the code at the top prevents a Routing Error when you go to a page and don't specify the locale (www.example.com/book) and it allows the default locale to be used. It knows the available locales from line &amp;lt;code&amp;gt;/#{I18n.available_locales.join(&amp;quot;|&amp;quot;)} &amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt; available_locales &amp;lt;/code&amp;gt; was set in the &amp;lt;code&amp;gt;application.rb&amp;lt;/code&amp;gt; file&lt;br /&gt;
----------------------------&lt;br /&gt;
* &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; Files&lt;br /&gt;
** &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; files know to look at the &amp;lt;code&amp;gt;view&amp;lt;/code&amp;gt; folder when looking for keys to show&lt;br /&gt;
** Because of that, &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; files are structured in a hierarchy as shown below:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  locale_name:&lt;br /&gt;
    folder_name:&lt;br /&gt;
      html_page_name:&lt;br /&gt;
        key_name_for_string:&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Below is a sample for how we formatted our two locale files&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  en:&lt;br /&gt;
    student_task:&lt;br /&gt;
      list:&lt;br /&gt;
        assignments: &amp;quot;Assignments&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  hi_IN:&lt;br /&gt;
    student_task:&lt;br /&gt;
      list:&lt;br /&gt;
        assignments: &amp;quot;असाइनमेंट&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;student_task&amp;lt;/code&amp;gt; is the folder under views: &amp;lt;code&amp;gt;views/student_task&amp;lt;/code&amp;gt;&lt;br /&gt;
* list is the name of the html page: &amp;lt;code&amp;gt;view/student_task/list.html.erb&amp;lt;/code&amp;gt;&lt;br /&gt;
* assignments is the key that replaces the word &amp;quot;Assignments&amp;quot; in the code (see next section). &lt;br /&gt;
* If more keys are added, they would need to be added in this format&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
----------------------------&lt;br /&gt;
* Student Views were translated as shown below:&lt;br /&gt;
** Regular Static Strings&lt;br /&gt;
*** Take any static, hard coded strings, like this one: &amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt; Assignments &amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;, and replace &amp;quot;Assignment&amp;quot;, with &amp;lt;code&amp;gt;&amp;lt;%=t &amp;quot;.key_name&amp;quot; %&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
*** The new code would look like this &amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt;&amp;lt;%=t &amp;quot;.key_name&amp;quot; %&amp;gt;&amp;lt;/h1&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt; key_name &amp;lt;/code&amp;gt; comes from the key in the &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; files. The locale variable (en or hi_IN) would determine which one it pulls from.&lt;br /&gt;
*** This is how you would change the strings for an html page.&lt;br /&gt;
** Static strings for buttons, dropdowns, etc.&lt;br /&gt;
*** You can also translate static string field values that you would find in buttons, dropdowns, etc. When you change these types of strings, you need slightly different code to translate it. &lt;br /&gt;
*** Example: &amp;lt;code&amp;gt;&amp;lt;%= submit_tag 'Save' %&amp;gt; &amp;lt;/code&amp;gt;. You would replace 'Save' with &amp;lt;code&amp;gt;t('.key_name')&amp;lt;/code&amp;gt;. &lt;br /&gt;
*** It would now look like this &amp;lt;code&amp;gt; &amp;lt;%= submit_tag t('.key_name') %&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
** Other Info&lt;br /&gt;
*** Because the &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; know what view folders to look in when choosing the keys, when you type . for the key_namefor the translation code (shown above), it will show the list of keys available for the html page you are in, at least in RubyMine. &lt;br /&gt;
*** Reference keys in other html files (Look at below code for example)&lt;br /&gt;
**** You can reference keys under from another html file within the same sub view folder.&lt;br /&gt;
***** For example, you can reference the key &amp;lt;code&amp;gt;select_assignment&amp;lt;/code&amp;gt; from the &amp;lt;code&amp;gt;view/student_task/view.html.erb&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;view/student_task/list.html.erb&amp;lt;/code&amp;gt; by doing &amp;lt;code&amp;gt;&amp;lt;%=t &amp;quot;.view.select_assignment&amp;quot; %&amp;gt;&amp;lt;/code&amp;gt; for a static string in &amp;lt;code&amp;gt;view/student_task/list.html.erb&amp;lt;/code&amp;gt;&lt;br /&gt;
**** You can reference keys from another html file in a different sub view folder&lt;br /&gt;
***** For example, you can reference the key &amp;lt;code&amp;gt;sign_up&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;view/publishing/view.html.erb&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;view/student_task/list.html.erb&amp;lt;/code&amp;gt; from by doing &amp;lt;code&amp;gt;&amp;lt;%=t &amp;quot;.publishing.view.sign_up&amp;quot; %&amp;gt;&amp;lt;/code&amp;gt; for a static string in &amp;lt;code&amp;gt;view/student_task/list.html.erb&amp;lt;/code&amp;gt;&lt;br /&gt;
**** By referencing keys not in the html file you are working on, you can reduce duplicate key names.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  en:&lt;br /&gt;
    student_task&lt;br /&gt;
      list:&lt;br /&gt;
        assignment: &amp;quot;Assignment&amp;quot;&lt;br /&gt;
      view:&lt;br /&gt;
        select_assignment: &amp;quot;Select Assignment&amp;quot;&lt;br /&gt;
    publishing&lt;br /&gt;
      view:&lt;br /&gt;
        sign_up: &amp;quot;Sign Up&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Example Output===&lt;br /&gt;
&lt;br /&gt;
====Original Page====&lt;br /&gt;
[[File:Internationalization ssignment main page.JPG]]&lt;br /&gt;
&lt;br /&gt;
====Translated Page====&lt;br /&gt;
&lt;br /&gt;
[[File:Internationalization assignment main translated page.JPG]]&lt;br /&gt;
&lt;br /&gt;
===Test Plan===&lt;br /&gt;
&lt;br /&gt;
====Student Credentials====&lt;br /&gt;
username: student1016 or student[4000-8000]&lt;br /&gt;
&lt;br /&gt;
password: password&lt;br /&gt;
&lt;br /&gt;
====Before Testing====&lt;br /&gt;
&lt;br /&gt;
* When going between pages, use the Back button link located on the bottom of pages, not on the browser&lt;br /&gt;
* When going to the main Assignment page, use the Back button link to get there to test out the scenarios below, not the link in the navigation bar.&lt;br /&gt;
&lt;br /&gt;
====Scenario 1====&lt;br /&gt;
&lt;br /&gt;
1. Log in to Expertiza as a student. &lt;br /&gt;
&lt;br /&gt;
2. Go to language dropdown in the navigation bar and choose Hindi. &lt;br /&gt;
&lt;br /&gt;
3. Check if language is changed in the URL from en to hi_IN&lt;br /&gt;
&lt;br /&gt;
4. Check to see if the English strings on the page are translated to Hindi&lt;br /&gt;
&lt;br /&gt;
5. While still logged in as a Student, check if the other Assignment related pages are also translated.&lt;br /&gt;
&lt;br /&gt;
====Scenario 2====&lt;br /&gt;
&lt;br /&gt;
1. Log in to Expertiza as a student. &lt;br /&gt;
&lt;br /&gt;
2. Go to language dropdown in the navigation bar and choose Hindi. &lt;br /&gt;
&lt;br /&gt;
3. Check if language is changed in the URL from en to hi_IN&lt;br /&gt;
&lt;br /&gt;
4. Check to see if the English strings on the page are translated to Hindi&lt;br /&gt;
&lt;br /&gt;
5. While still logged in as a Student, check if the other Assignment related pages are also translated.&lt;br /&gt;
&lt;br /&gt;
6. Go back to the main Assignment page and choose English from the dropdown. &lt;br /&gt;
&lt;br /&gt;
7. See if the language was changed in the URL to en. &lt;br /&gt;
&lt;br /&gt;
8. See if the strings are translated back to English for all Assignment related pages. &lt;br /&gt;
&lt;br /&gt;
====Scenario 3====&lt;br /&gt;
&lt;br /&gt;
1. Log in to Expertiza as a student. &lt;br /&gt;
&lt;br /&gt;
2. Go to URL and change the language from en to hi_IN. &lt;br /&gt;
&lt;br /&gt;
3. Check to see if the English strings on the page are translated to Hindi.&lt;br /&gt;
&lt;br /&gt;
4. While still logged in as a Student, check if the other Assignment related pages are also translated.&lt;br /&gt;
&lt;br /&gt;
====Scenario 4====&lt;br /&gt;
&lt;br /&gt;
1. Log in to Expertiza as a student. &lt;br /&gt;
&lt;br /&gt;
2. Go to URL and change the language from en to hi_IN. &lt;br /&gt;
&lt;br /&gt;
3. Check to see if the English strings on the page are translated to Hindi.&lt;br /&gt;
&lt;br /&gt;
4. While still logged in as a Student, check if the other Assignment related pages are also translated.&lt;br /&gt;
&lt;br /&gt;
5. Now change the language back from hi_IN to en in the URL. &lt;br /&gt;
&lt;br /&gt;
6. See if the Hindi strings are translated back to English for all Assignment related pages.&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
Due to time, there were some things we weren't able to fix or work on.&lt;br /&gt;
* Problems:&lt;br /&gt;
** When a student goes back to the main Assignment page, views/student_task/list, by clicking the link in the navigation bar, the language locale doesn't appear in the URL. This means that if you did change the language from the dropdown or manually, it will go back to the default locale language. See the URL below:&lt;br /&gt;
*** [[File:Internationalization assignment link langauge error.JPG]]&lt;br /&gt;
** If you try to use the language dropdown in a page other than the main Assignment page, it will give an error like the one shown below:&lt;br /&gt;
*** [[File:Internationalization langauge dropdown error.JPG]]&lt;br /&gt;
** But if you manually change the language in the URL, it works fine and persists as you navigate through the pages. &lt;br /&gt;
* Feature:&lt;br /&gt;
** We also have translated keys for many course pages, but did not implement the actual translation code in the view files for them. You should be able to look at the keys to find out which view files they are.&lt;br /&gt;
** Adding translation for Chinese.&lt;br /&gt;
*Additional Considerations(After our discussion during presentation):&lt;br /&gt;
**A future team needs to add support for dynamic text. Our project was only concerned with Expertiza's static text. The dynamic text needs to change too for a completely seamless end user experience.&lt;br /&gt;
**When generating translations, one must consider the differences in sentence structure between languages. In many cases throughout Expertiza we see the following pattern: &amp;lt;static_text&amp;gt;&amp;lt;dynamic_text&amp;gt;&amp;lt;static_text&amp;gt;. This is a difficult case to handle. What looks like a natural break in sentence structure in one language may not look natural in another. Dr. Gehringer mentioned the possibility of having that location of the dynamic text also be able to change between locales. This needs to be investigated by a future team. That may require a different API, or generating an entirely separate view for each locale(not ideal).&lt;br /&gt;
**When dealing with dynamic text two approaches need to be investigated(in addition to researching API suppport):&lt;br /&gt;
***Query the model in its default locale and attempt to match the string with a translation after retrieval(ideal). This would be the preferred approach. We don't want to have to alter our model to alter our translations. Barring API support, this might present complicated view code, but would be preferable to created dependency between the model and the translation.&lt;br /&gt;
***Store separate text fields in the model for each locale(not ideal). This is something we want to avoid. We should not be altering the model to add functionality to our views.&lt;br /&gt;
**The student16 login used to test Expertiza needs more work. Some student views are inaccessible due to a lack of inbuilt data. This makes testing more difficult to accomplish.&lt;br /&gt;
&lt;br /&gt;
== Links/References ==&lt;br /&gt;
&lt;br /&gt;
===Project Links===&lt;br /&gt;
&lt;br /&gt;
* Pull Request: https://github.com/expertiza/expertiza/pull/1286&lt;br /&gt;
* Github: https://github.com/mukhtar23/expertiza&lt;br /&gt;
* Video: https://youtu.be/TA9PkcK61QM&lt;br /&gt;
&lt;br /&gt;
===Support Material===&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#abstracting-localized-code https://guides.rubyonrails.org/i18n.html#abstracting-localized-code]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations]&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=HLb0hEgrXTc https://www.youtube.com/watch?v=HLb0hEgrXTc]&lt;br /&gt;
* [https://phraseapp.com/blog/posts/rails-i18n-guide/ https://phraseapp.com/blog/posts/rails-i18n-guide/]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=121524</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=121524"/>
		<updated>2018-12-15T02:53:51Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: /* Future Work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
===Team Members===&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Hasham Mukhtar (hmukhta@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Abhilasha Saini (asaini4@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Reddy Aravind Karnam Ganesh (rkarnam@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=== Mentor ===&lt;br /&gt;
&lt;br /&gt;
Zhewei Hu (zhu6@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
&lt;br /&gt;
config/locales/&lt;br /&gt;
&lt;br /&gt;
* en.yml&lt;br /&gt;
&lt;br /&gt;
* hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
config/&lt;br /&gt;
&lt;br /&gt;
* routes.rb&lt;br /&gt;
* application.rb&lt;br /&gt;
&lt;br /&gt;
app/controllers/&lt;br /&gt;
* applcation_controller.rb&lt;br /&gt;
&lt;br /&gt;
Student View Files:&lt;br /&gt;
&lt;br /&gt;
* app/views/&lt;br /&gt;
** shared/&lt;br /&gt;
*** _navigation.html.erb&lt;br /&gt;
** sign_up_sheet/&lt;br /&gt;
*** _suggested_topic.html.erb&lt;br /&gt;
*** _table_header.html.erb&lt;br /&gt;
*** list.html.erb&lt;br /&gt;
** student_task/&lt;br /&gt;
*** list.html.erb&lt;br /&gt;
*** view.html.erb&lt;br /&gt;
*** _publishing_rights.html.erb&lt;br /&gt;
** student_teams/&lt;br /&gt;
*** edit.html.erb&lt;br /&gt;
*** view.html.erb&lt;br /&gt;
** submitted_content/&lt;br /&gt;
*** _hyperlink.html.erb&lt;br /&gt;
*** _main.html.erb&lt;br /&gt;
*** _self_review.html.erb&lt;br /&gt;
*** _submitted_files.html.erb&lt;br /&gt;
*** _title.html.erb&lt;br /&gt;
*** edit.html.erb&lt;br /&gt;
** grades/&lt;br /&gt;
*** view_my_scores.html.erb&lt;br /&gt;
*** view_team.html.erb&lt;br /&gt;
** student_review/&lt;br /&gt;
*** list.html.erb&lt;br /&gt;
*** _responses.html.erb&lt;br /&gt;
*** _set_dynamic_review.html.erb&lt;br /&gt;
** participants/&lt;br /&gt;
*** change_handle.html.erb&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
Currently Expertiza only supports the English language. Many students are from other countries. So, we aimed to allow them to view their pages in another language. This is done by internationalizing static strings in Expertiza for Student Assignment related pages to another language (ex: Hindi or Chinese). Students had the ability to change the language through a dropdown located in navigation bar at the top of the page. We did not affect any strings that are dynamically shown. We focused on adding the Hindi language as a lot of students are Indian.&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;br /&gt;
&lt;br /&gt;
===Technical Design===&lt;br /&gt;
&lt;br /&gt;
====Allowing Student to change language for Assignment Pages====&lt;br /&gt;
&lt;br /&gt;
* We added a dropdown in the navigation bar for a student to use&lt;br /&gt;
* They are able to choose from English or Hindi&lt;br /&gt;
* [[File: Internationalization Navigation dropdown 2.JPG]]&lt;br /&gt;
* When the language is clicked on it changed all the static strings in the Student Views related to Assignments to the newly selected language.&lt;br /&gt;
* Students could also manually change the language in the URL themselves by. The language is put before the page name. Example: www.example.com/en/book -&amp;gt; www.example.com/hi_IN/book&lt;br /&gt;
&lt;br /&gt;
====Adding Multi-Language Support====&lt;br /&gt;
&lt;br /&gt;
* For this project, we added support for one language, Hindi. &lt;br /&gt;
* We used Google Translate to convert the strings to Hindi.&lt;br /&gt;
* We used the [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works Rails Internationalization (I18n) API] to help us add multi language support.&lt;br /&gt;
* There are two &amp;lt;code&amp;gt;yml&amp;lt;/code&amp;gt; files in the &amp;lt;code&amp;gt;config/locales&amp;lt;/code&amp;gt; directory representing the different languages that can be used in Expertiza.&lt;br /&gt;
** One for English, which will be the default language used, and another for Hindi. &lt;br /&gt;
*** &amp;lt;code&amp;gt;en.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;hi_IN.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
** These &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files contained the translated strings for their respective language.&lt;br /&gt;
* We editied the &amp;lt;code&amp;gt;routes.rb, application.rb, application_controller.rb&amp;lt;/code&amp;gt; files and all the view files related to Student Assignments (which you can see at the top of the wiki) so that it can read from the &amp;lt;code&amp;gt;yml&amp;lt;/code&amp;gt; files to show other languages.&lt;br /&gt;
------------------------------&lt;br /&gt;
* &amp;lt;code&amp;gt;application.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
** We've added the following two lines in the Recaptcha module of this file:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    config.i18n.available_locales = [:en,:hi_IN]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* This tells the application all the available locale &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; files that are supported. If you wanted to add more language support, you can just add it to the list shown here.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    config.i18n.default_locale = :en&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* The sets the default language for the application. Which in this case is English.&lt;br /&gt;
----------------------------&lt;br /&gt;
* &amp;lt;code&amp;gt;application_controller.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
** We added the following to this file to get translations to work:&lt;br /&gt;
&amp;lt;code&amp;gt; &lt;br /&gt;
  before_action :set_locale &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* This will call the set_locale method&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def set_locale&lt;br /&gt;
    I18n.locale = params[:locale] || I18n.default_locale&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* This sets the locale (language to use) for the application. The locale is taken from the URL query params list. If none is given, then it defaults to our default locale file (which is English). The application will always default to English and it won't pull from params until another language is chosen from the dropdown and sets :locale to something else. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def default_url_options(options={})&lt;br /&gt;
    {locale: I18n.locale}.merge options&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* This makes the URL always have a locale, which is set in the set_locale method, in it. This way the user doesn't have to manually enter a locale in the URL to translate the page. However, it adds the locale to the end of the URL like this: www.example.com/book/?locale=en. This is not something we want as it doesn't look good. This is fixed with routes.rb&lt;br /&gt;
-----------------------------&lt;br /&gt;
* &amp;lt;code&amp;gt; routes.rb &amp;lt;/code&amp;gt;&lt;br /&gt;
** We wrapped the file in &amp;lt;code&amp;gt; routes.rb &amp;lt;/code&amp;gt; with a &amp;lt;code&amp;gt;scope:&amp;lt;/code&amp;gt; so that the locale can be added before the page name in the URL. Something like this: www.example.com/en/book&lt;br /&gt;
** [[File:Internationalization Route rb 2.JPG]]&lt;br /&gt;
*** the code at the top prevents a Routing Error when you go to a page and don't specify the locale (www.example.com/book) and it allows the default locale to be used. It knows the available locales from line &amp;lt;code&amp;gt;/#{I18n.available_locales.join(&amp;quot;|&amp;quot;)} &amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt; available_locales &amp;lt;/code&amp;gt; was set in the &amp;lt;code&amp;gt;application.rb&amp;lt;/code&amp;gt; file&lt;br /&gt;
----------------------------&lt;br /&gt;
* &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; Files&lt;br /&gt;
** &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; files know to look at the &amp;lt;code&amp;gt;view&amp;lt;/code&amp;gt; folder when looking for keys to show&lt;br /&gt;
** Because of that, &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; files are structured in a hierarchy as shown below:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  locale_name:&lt;br /&gt;
    folder_name:&lt;br /&gt;
      html_page_name:&lt;br /&gt;
        key_name_for_string:&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Below is a sample for how we formatted our two locale files&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  en:&lt;br /&gt;
    student_task:&lt;br /&gt;
      list:&lt;br /&gt;
        assignments: &amp;quot;Assignments&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  hi_IN:&lt;br /&gt;
    student_task:&lt;br /&gt;
      list:&lt;br /&gt;
        assignments: &amp;quot;असाइनमेंट&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;student_task&amp;lt;/code&amp;gt; is the folder under views: &amp;lt;code&amp;gt;views/student_task&amp;lt;/code&amp;gt;&lt;br /&gt;
* list is the name of the html page: &amp;lt;code&amp;gt;view/student_task/list.html.erb&amp;lt;/code&amp;gt;&lt;br /&gt;
* assignments is the key that replaces the word &amp;quot;Assignments&amp;quot; in the code (see next section). &lt;br /&gt;
* If more keys are added, they would need to be added in this format&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
----------------------------&lt;br /&gt;
* Student Views were translated as shown below:&lt;br /&gt;
** Regular Static Strings&lt;br /&gt;
*** Take any static, hard coded strings, like this one: &amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt; Assignments &amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;, and replace &amp;quot;Assignment&amp;quot;, with &amp;lt;code&amp;gt;&amp;lt;%=t &amp;quot;.key_name&amp;quot; %&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
*** The new code would look like this &amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt;&amp;lt;%=t &amp;quot;.key_name&amp;quot; %&amp;gt;&amp;lt;/h1&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt; key_name &amp;lt;/code&amp;gt; comes from the key in the &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; files. The locale variable (en or hi_IN) would determine which one it pulls from.&lt;br /&gt;
*** This is how you would change the strings for an html page.&lt;br /&gt;
** Static strings for buttons, dropdowns, etc.&lt;br /&gt;
*** You can also translate static string field values that you would find in buttons, dropdowns, etc. When you change these types of strings, you need slightly different code to translate it. &lt;br /&gt;
*** Example: &amp;lt;code&amp;gt;&amp;lt;%= submit_tag 'Save' %&amp;gt; &amp;lt;/code&amp;gt;. You would replace 'Save' with &amp;lt;code&amp;gt;t('.key_name')&amp;lt;/code&amp;gt;. &lt;br /&gt;
*** It would now look like this &amp;lt;code&amp;gt; &amp;lt;%= submit_tag t('.key_name') %&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
** Other Info&lt;br /&gt;
*** Because the &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; know what view folders to look in when choosing the keys, when you type . for the key_namefor the translation code (shown above), it will show the list of keys available for the html page you are in, at least in RubyMine. &lt;br /&gt;
*** Reference keys in other html files (Look at below code for example)&lt;br /&gt;
**** You can reference keys under from another html file within the same sub view folder.&lt;br /&gt;
***** For example, you can reference the key &amp;lt;code&amp;gt;select_assignment&amp;lt;/code&amp;gt; from the &amp;lt;code&amp;gt;view/student_task/view.html.erb&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;view/student_task/list.html.erb&amp;lt;/code&amp;gt; by doing &amp;lt;code&amp;gt;&amp;lt;%=t &amp;quot;.view.select_assignment&amp;quot; %&amp;gt;&amp;lt;/code&amp;gt; for a static string in &amp;lt;code&amp;gt;view/student_task/list.html.erb&amp;lt;/code&amp;gt;&lt;br /&gt;
**** You can reference keys from another html file in a different sub view folder&lt;br /&gt;
***** For example, you can reference the key &amp;lt;code&amp;gt;sign_up&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;view/publishing/view.html.erb&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;view/student_task/list.html.erb&amp;lt;/code&amp;gt; from by doing &amp;lt;code&amp;gt;&amp;lt;%=t &amp;quot;.publishing.view.sign_up&amp;quot; %&amp;gt;&amp;lt;/code&amp;gt; for a static string in &amp;lt;code&amp;gt;view/student_task/list.html.erb&amp;lt;/code&amp;gt;&lt;br /&gt;
**** By referencing keys not in the html file you are working on, you can reduce duplicate key names.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  en:&lt;br /&gt;
    student_task&lt;br /&gt;
      list:&lt;br /&gt;
        assignment: &amp;quot;Assignment&amp;quot;&lt;br /&gt;
      view:&lt;br /&gt;
        select_assignment: &amp;quot;Select Assignment&amp;quot;&lt;br /&gt;
    publishing&lt;br /&gt;
      view:&lt;br /&gt;
        sign_up: &amp;quot;Sign Up&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Example Output===&lt;br /&gt;
&lt;br /&gt;
====Original Page====&lt;br /&gt;
[[File:Internationalization ssignment main page.JPG]]&lt;br /&gt;
&lt;br /&gt;
====Translated Page====&lt;br /&gt;
&lt;br /&gt;
[[File:Internationalization assignment main translated page.JPG]]&lt;br /&gt;
&lt;br /&gt;
===Test Plan===&lt;br /&gt;
&lt;br /&gt;
====Student Credentials====&lt;br /&gt;
username: student1016 or student[4000-8000]&lt;br /&gt;
&lt;br /&gt;
password: password&lt;br /&gt;
&lt;br /&gt;
====Before Testing====&lt;br /&gt;
&lt;br /&gt;
* When going between pages, use the Back button link located on the bottom of pages, not on the browser&lt;br /&gt;
* When going to the main Assignment page, use the Back button link to get there to test out the scenarios below, not the link in the navigation bar.&lt;br /&gt;
&lt;br /&gt;
====Scenario 1====&lt;br /&gt;
&lt;br /&gt;
1. Log in to Expertiza as a student. &lt;br /&gt;
&lt;br /&gt;
2. Go to language dropdown in the navigation bar and choose Hindi. &lt;br /&gt;
&lt;br /&gt;
3. Check if language is changed in the URL from en to hi_IN&lt;br /&gt;
&lt;br /&gt;
4. Check to see if the English strings on the page are translated to Hindi&lt;br /&gt;
&lt;br /&gt;
5. While still logged in as a Student, check if the other Assignment related pages are also translated.&lt;br /&gt;
&lt;br /&gt;
====Scenario 2====&lt;br /&gt;
&lt;br /&gt;
1. Log in to Expertiza as a student. &lt;br /&gt;
&lt;br /&gt;
2. Go to language dropdown in the navigation bar and choose Hindi. &lt;br /&gt;
&lt;br /&gt;
3. Check if language is changed in the URL from en to hi_IN&lt;br /&gt;
&lt;br /&gt;
4. Check to see if the English strings on the page are translated to Hindi&lt;br /&gt;
&lt;br /&gt;
5. While still logged in as a Student, check if the other Assignment related pages are also translated.&lt;br /&gt;
&lt;br /&gt;
6. Go back to the main Assignment page and choose English from the dropdown. &lt;br /&gt;
&lt;br /&gt;
7. See if the language was changed in the URL to en. &lt;br /&gt;
&lt;br /&gt;
8. See if the strings are translated back to English for all Assignment related pages. &lt;br /&gt;
&lt;br /&gt;
====Scenario 3====&lt;br /&gt;
&lt;br /&gt;
1. Log in to Expertiza as a student. &lt;br /&gt;
&lt;br /&gt;
2. Go to URL and change the language from en to hi_IN. &lt;br /&gt;
&lt;br /&gt;
3. Check to see if the English strings on the page are translated to Hindi.&lt;br /&gt;
&lt;br /&gt;
4. While still logged in as a Student, check if the other Assignment related pages are also translated.&lt;br /&gt;
&lt;br /&gt;
====Scenario 4====&lt;br /&gt;
&lt;br /&gt;
1. Log in to Expertiza as a student. &lt;br /&gt;
&lt;br /&gt;
2. Go to URL and change the language from en to hi_IN. &lt;br /&gt;
&lt;br /&gt;
3. Check to see if the English strings on the page are translated to Hindi.&lt;br /&gt;
&lt;br /&gt;
4. While still logged in as a Student, check if the other Assignment related pages are also translated.&lt;br /&gt;
&lt;br /&gt;
5. Now change the language back from hi_IN to en in the URL. &lt;br /&gt;
&lt;br /&gt;
6. See if the Hindi strings are translated back to English for all Assignment related pages.&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
Due to time, there were some things we weren't able to fix or work on.&lt;br /&gt;
* Problems:&lt;br /&gt;
** When a student goes back to the main Assignment page, views/student_task/list, by clicking the link in the navigation bar, the language locale doesn't appear in the URL. This means that if you did change the language from the dropdown or manually, it will go back to the default locale language. See the URL below:&lt;br /&gt;
*** [[File:Internationalization assignment link langauge error.JPG]]&lt;br /&gt;
** If you try to use the language dropdown in a page other than the main Assignment page, it will give an error like the one shown below:&lt;br /&gt;
*** [[File:Internationalization langauge dropdown error.JPG]]&lt;br /&gt;
** But if you manually change the language in the URL, it works fine and persists as you navigate through the pages. &lt;br /&gt;
* Feature:&lt;br /&gt;
** We also have translated keys for many course pages, but did not implement the actual translation code in the view files for them. You should be able to look at the keys to find out which view files they are.&lt;br /&gt;
** Adding translation for Chinese.&lt;br /&gt;
*Additional Considerations(After our discussion during presentation):&lt;br /&gt;
**A future team needs to add support for dynamic text. Our project was only concerned with Expertiza's static text. The dynamic text needs to change too for a completely seamless end user experience.&lt;br /&gt;
**When generating translations, one must consider the differences in sentence structure between languages. In many cases throughout Expertiza we see the following pattern: &amp;lt;static_text&amp;gt;&amp;lt;dynamic_text&amp;gt;&amp;lt;static_text&amp;gt;. This is a difficult case to handle. What looks like a natural break in sentence structure in one language may not look natural in another. Dr. Gehringer mentioned the possibility of having that location of the dynamic text also be able to change between locales. This needs to be investigated by a future team. That may require a different API, or generating an entirely separate view for each locale(not ideal).&lt;br /&gt;
**When dealing with dynamic text two approaches need to be investigated(in addition to researching API suppport):&lt;br /&gt;
***Query the model in its default locale and attempt to match the string with a translation after retrieval(ideal). This would be the preferred approach. We don't want to have to alter our model to alter our translations. Barring API support, this might present complicated view code, but would be preferable to created dependency between the model and the translation.&lt;br /&gt;
***Store separate text fields in the model for each locale(not ideal). This is something we want to avoid. We should not be altering the model to add functionality to our views.&lt;br /&gt;
**The student16 login used to test Expertiza needs more work. Some pages needed to test our project were inaccessible due to a lack of inbuilt data.&lt;br /&gt;
&lt;br /&gt;
== Links/References ==&lt;br /&gt;
&lt;br /&gt;
===Project Links===&lt;br /&gt;
&lt;br /&gt;
* Pull Request: https://github.com/expertiza/expertiza/pull/1286&lt;br /&gt;
* Github: https://github.com/mukhtar23/expertiza&lt;br /&gt;
* Video: https://youtu.be/TA9PkcK61QM&lt;br /&gt;
&lt;br /&gt;
===Support Material===&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#abstracting-localized-code https://guides.rubyonrails.org/i18n.html#abstracting-localized-code]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations]&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=HLb0hEgrXTc https://www.youtube.com/watch?v=HLb0hEgrXTc]&lt;br /&gt;
* [https://phraseapp.com/blog/posts/rails-i18n-guide/ https://phraseapp.com/blog/posts/rails-i18n-guide/]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=121523</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=121523"/>
		<updated>2018-12-15T02:51:51Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: /* Future Work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
===Team Members===&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Hasham Mukhtar (hmukhta@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Abhilasha Saini (asaini4@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Reddy Aravind Karnam Ganesh (rkarnam@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=== Mentor ===&lt;br /&gt;
&lt;br /&gt;
Zhewei Hu (zhu6@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
&lt;br /&gt;
config/locales/&lt;br /&gt;
&lt;br /&gt;
* en.yml&lt;br /&gt;
&lt;br /&gt;
* hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
config/&lt;br /&gt;
&lt;br /&gt;
* routes.rb&lt;br /&gt;
* application.rb&lt;br /&gt;
&lt;br /&gt;
app/controllers/&lt;br /&gt;
* applcation_controller.rb&lt;br /&gt;
&lt;br /&gt;
Student View Files:&lt;br /&gt;
&lt;br /&gt;
* app/views/&lt;br /&gt;
** shared/&lt;br /&gt;
*** _navigation.html.erb&lt;br /&gt;
** sign_up_sheet/&lt;br /&gt;
*** _suggested_topic.html.erb&lt;br /&gt;
*** _table_header.html.erb&lt;br /&gt;
*** list.html.erb&lt;br /&gt;
** student_task/&lt;br /&gt;
*** list.html.erb&lt;br /&gt;
*** view.html.erb&lt;br /&gt;
*** _publishing_rights.html.erb&lt;br /&gt;
** student_teams/&lt;br /&gt;
*** edit.html.erb&lt;br /&gt;
*** view.html.erb&lt;br /&gt;
** submitted_content/&lt;br /&gt;
*** _hyperlink.html.erb&lt;br /&gt;
*** _main.html.erb&lt;br /&gt;
*** _self_review.html.erb&lt;br /&gt;
*** _submitted_files.html.erb&lt;br /&gt;
*** _title.html.erb&lt;br /&gt;
*** edit.html.erb&lt;br /&gt;
** grades/&lt;br /&gt;
*** view_my_scores.html.erb&lt;br /&gt;
*** view_team.html.erb&lt;br /&gt;
** student_review/&lt;br /&gt;
*** list.html.erb&lt;br /&gt;
*** _responses.html.erb&lt;br /&gt;
*** _set_dynamic_review.html.erb&lt;br /&gt;
** participants/&lt;br /&gt;
*** change_handle.html.erb&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
Currently Expertiza only supports the English language. Many students are from other countries. So, we aimed to allow them to view their pages in another language. This is done by internationalizing static strings in Expertiza for Student Assignment related pages to another language (ex: Hindi or Chinese). Students had the ability to change the language through a dropdown located in navigation bar at the top of the page. We did not affect any strings that are dynamically shown. We focused on adding the Hindi language as a lot of students are Indian.&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;br /&gt;
&lt;br /&gt;
===Technical Design===&lt;br /&gt;
&lt;br /&gt;
====Allowing Student to change language for Assignment Pages====&lt;br /&gt;
&lt;br /&gt;
* We added a dropdown in the navigation bar for a student to use&lt;br /&gt;
* They are able to choose from English or Hindi&lt;br /&gt;
* [[File: Internationalization Navigation dropdown 2.JPG]]&lt;br /&gt;
* When the language is clicked on it changed all the static strings in the Student Views related to Assignments to the newly selected language.&lt;br /&gt;
* Students could also manually change the language in the URL themselves by. The language is put before the page name. Example: www.example.com/en/book -&amp;gt; www.example.com/hi_IN/book&lt;br /&gt;
&lt;br /&gt;
====Adding Multi-Language Support====&lt;br /&gt;
&lt;br /&gt;
* For this project, we added support for one language, Hindi. &lt;br /&gt;
* We used Google Translate to convert the strings to Hindi.&lt;br /&gt;
* We used the [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works Rails Internationalization (I18n) API] to help us add multi language support.&lt;br /&gt;
* There are two &amp;lt;code&amp;gt;yml&amp;lt;/code&amp;gt; files in the &amp;lt;code&amp;gt;config/locales&amp;lt;/code&amp;gt; directory representing the different languages that can be used in Expertiza.&lt;br /&gt;
** One for English, which will be the default language used, and another for Hindi. &lt;br /&gt;
*** &amp;lt;code&amp;gt;en.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;hi_IN.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
** These &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files contained the translated strings for their respective language.&lt;br /&gt;
* We editied the &amp;lt;code&amp;gt;routes.rb, application.rb, application_controller.rb&amp;lt;/code&amp;gt; files and all the view files related to Student Assignments (which you can see at the top of the wiki) so that it can read from the &amp;lt;code&amp;gt;yml&amp;lt;/code&amp;gt; files to show other languages.&lt;br /&gt;
------------------------------&lt;br /&gt;
* &amp;lt;code&amp;gt;application.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
** We've added the following two lines in the Recaptcha module of this file:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    config.i18n.available_locales = [:en,:hi_IN]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* This tells the application all the available locale &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; files that are supported. If you wanted to add more language support, you can just add it to the list shown here.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    config.i18n.default_locale = :en&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* The sets the default language for the application. Which in this case is English.&lt;br /&gt;
----------------------------&lt;br /&gt;
* &amp;lt;code&amp;gt;application_controller.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
** We added the following to this file to get translations to work:&lt;br /&gt;
&amp;lt;code&amp;gt; &lt;br /&gt;
  before_action :set_locale &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* This will call the set_locale method&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def set_locale&lt;br /&gt;
    I18n.locale = params[:locale] || I18n.default_locale&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* This sets the locale (language to use) for the application. The locale is taken from the URL query params list. If none is given, then it defaults to our default locale file (which is English). The application will always default to English and it won't pull from params until another language is chosen from the dropdown and sets :locale to something else. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def default_url_options(options={})&lt;br /&gt;
    {locale: I18n.locale}.merge options&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* This makes the URL always have a locale, which is set in the set_locale method, in it. This way the user doesn't have to manually enter a locale in the URL to translate the page. However, it adds the locale to the end of the URL like this: www.example.com/book/?locale=en. This is not something we want as it doesn't look good. This is fixed with routes.rb&lt;br /&gt;
-----------------------------&lt;br /&gt;
* &amp;lt;code&amp;gt; routes.rb &amp;lt;/code&amp;gt;&lt;br /&gt;
** We wrapped the file in &amp;lt;code&amp;gt; routes.rb &amp;lt;/code&amp;gt; with a &amp;lt;code&amp;gt;scope:&amp;lt;/code&amp;gt; so that the locale can be added before the page name in the URL. Something like this: www.example.com/en/book&lt;br /&gt;
** [[File:Internationalization Route rb 2.JPG]]&lt;br /&gt;
*** the code at the top prevents a Routing Error when you go to a page and don't specify the locale (www.example.com/book) and it allows the default locale to be used. It knows the available locales from line &amp;lt;code&amp;gt;/#{I18n.available_locales.join(&amp;quot;|&amp;quot;)} &amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt; available_locales &amp;lt;/code&amp;gt; was set in the &amp;lt;code&amp;gt;application.rb&amp;lt;/code&amp;gt; file&lt;br /&gt;
----------------------------&lt;br /&gt;
* &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; Files&lt;br /&gt;
** &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; files know to look at the &amp;lt;code&amp;gt;view&amp;lt;/code&amp;gt; folder when looking for keys to show&lt;br /&gt;
** Because of that, &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; files are structured in a hierarchy as shown below:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  locale_name:&lt;br /&gt;
    folder_name:&lt;br /&gt;
      html_page_name:&lt;br /&gt;
        key_name_for_string:&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Below is a sample for how we formatted our two locale files&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  en:&lt;br /&gt;
    student_task:&lt;br /&gt;
      list:&lt;br /&gt;
        assignments: &amp;quot;Assignments&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  hi_IN:&lt;br /&gt;
    student_task:&lt;br /&gt;
      list:&lt;br /&gt;
        assignments: &amp;quot;असाइनमेंट&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;student_task&amp;lt;/code&amp;gt; is the folder under views: &amp;lt;code&amp;gt;views/student_task&amp;lt;/code&amp;gt;&lt;br /&gt;
* list is the name of the html page: &amp;lt;code&amp;gt;view/student_task/list.html.erb&amp;lt;/code&amp;gt;&lt;br /&gt;
* assignments is the key that replaces the word &amp;quot;Assignments&amp;quot; in the code (see next section). &lt;br /&gt;
* If more keys are added, they would need to be added in this format&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
----------------------------&lt;br /&gt;
* Student Views were translated as shown below:&lt;br /&gt;
** Regular Static Strings&lt;br /&gt;
*** Take any static, hard coded strings, like this one: &amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt; Assignments &amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;, and replace &amp;quot;Assignment&amp;quot;, with &amp;lt;code&amp;gt;&amp;lt;%=t &amp;quot;.key_name&amp;quot; %&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
*** The new code would look like this &amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt;&amp;lt;%=t &amp;quot;.key_name&amp;quot; %&amp;gt;&amp;lt;/h1&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt; key_name &amp;lt;/code&amp;gt; comes from the key in the &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; files. The locale variable (en or hi_IN) would determine which one it pulls from.&lt;br /&gt;
*** This is how you would change the strings for an html page.&lt;br /&gt;
** Static strings for buttons, dropdowns, etc.&lt;br /&gt;
*** You can also translate static string field values that you would find in buttons, dropdowns, etc. When you change these types of strings, you need slightly different code to translate it. &lt;br /&gt;
*** Example: &amp;lt;code&amp;gt;&amp;lt;%= submit_tag 'Save' %&amp;gt; &amp;lt;/code&amp;gt;. You would replace 'Save' with &amp;lt;code&amp;gt;t('.key_name')&amp;lt;/code&amp;gt;. &lt;br /&gt;
*** It would now look like this &amp;lt;code&amp;gt; &amp;lt;%= submit_tag t('.key_name') %&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
** Other Info&lt;br /&gt;
*** Because the &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; know what view folders to look in when choosing the keys, when you type . for the key_namefor the translation code (shown above), it will show the list of keys available for the html page you are in, at least in RubyMine. &lt;br /&gt;
*** Reference keys in other html files (Look at below code for example)&lt;br /&gt;
**** You can reference keys under from another html file within the same sub view folder.&lt;br /&gt;
***** For example, you can reference the key &amp;lt;code&amp;gt;select_assignment&amp;lt;/code&amp;gt; from the &amp;lt;code&amp;gt;view/student_task/view.html.erb&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;view/student_task/list.html.erb&amp;lt;/code&amp;gt; by doing &amp;lt;code&amp;gt;&amp;lt;%=t &amp;quot;.view.select_assignment&amp;quot; %&amp;gt;&amp;lt;/code&amp;gt; for a static string in &amp;lt;code&amp;gt;view/student_task/list.html.erb&amp;lt;/code&amp;gt;&lt;br /&gt;
**** You can reference keys from another html file in a different sub view folder&lt;br /&gt;
***** For example, you can reference the key &amp;lt;code&amp;gt;sign_up&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;view/publishing/view.html.erb&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;view/student_task/list.html.erb&amp;lt;/code&amp;gt; from by doing &amp;lt;code&amp;gt;&amp;lt;%=t &amp;quot;.publishing.view.sign_up&amp;quot; %&amp;gt;&amp;lt;/code&amp;gt; for a static string in &amp;lt;code&amp;gt;view/student_task/list.html.erb&amp;lt;/code&amp;gt;&lt;br /&gt;
**** By referencing keys not in the html file you are working on, you can reduce duplicate key names.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  en:&lt;br /&gt;
    student_task&lt;br /&gt;
      list:&lt;br /&gt;
        assignment: &amp;quot;Assignment&amp;quot;&lt;br /&gt;
      view:&lt;br /&gt;
        select_assignment: &amp;quot;Select Assignment&amp;quot;&lt;br /&gt;
    publishing&lt;br /&gt;
      view:&lt;br /&gt;
        sign_up: &amp;quot;Sign Up&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Example Output===&lt;br /&gt;
&lt;br /&gt;
====Original Page====&lt;br /&gt;
[[File:Internationalization ssignment main page.JPG]]&lt;br /&gt;
&lt;br /&gt;
====Translated Page====&lt;br /&gt;
&lt;br /&gt;
[[File:Internationalization assignment main translated page.JPG]]&lt;br /&gt;
&lt;br /&gt;
===Test Plan===&lt;br /&gt;
&lt;br /&gt;
====Student Credentials====&lt;br /&gt;
username: student1016 or student[4000-8000]&lt;br /&gt;
&lt;br /&gt;
password: password&lt;br /&gt;
&lt;br /&gt;
====Before Testing====&lt;br /&gt;
&lt;br /&gt;
* When going between pages, use the Back button link located on the bottom of pages, not on the browser&lt;br /&gt;
* When going to the main Assignment page, use the Back button link to get there to test out the scenarios below, not the link in the navigation bar.&lt;br /&gt;
&lt;br /&gt;
====Scenario 1====&lt;br /&gt;
&lt;br /&gt;
1. Log in to Expertiza as a student. &lt;br /&gt;
&lt;br /&gt;
2. Go to language dropdown in the navigation bar and choose Hindi. &lt;br /&gt;
&lt;br /&gt;
3. Check if language is changed in the URL from en to hi_IN&lt;br /&gt;
&lt;br /&gt;
4. Check to see if the English strings on the page are translated to Hindi&lt;br /&gt;
&lt;br /&gt;
5. While still logged in as a Student, check if the other Assignment related pages are also translated.&lt;br /&gt;
&lt;br /&gt;
====Scenario 2====&lt;br /&gt;
&lt;br /&gt;
1. Log in to Expertiza as a student. &lt;br /&gt;
&lt;br /&gt;
2. Go to language dropdown in the navigation bar and choose Hindi. &lt;br /&gt;
&lt;br /&gt;
3. Check if language is changed in the URL from en to hi_IN&lt;br /&gt;
&lt;br /&gt;
4. Check to see if the English strings on the page are translated to Hindi&lt;br /&gt;
&lt;br /&gt;
5. While still logged in as a Student, check if the other Assignment related pages are also translated.&lt;br /&gt;
&lt;br /&gt;
6. Go back to the main Assignment page and choose English from the dropdown. &lt;br /&gt;
&lt;br /&gt;
7. See if the language was changed in the URL to en. &lt;br /&gt;
&lt;br /&gt;
8. See if the strings are translated back to English for all Assignment related pages. &lt;br /&gt;
&lt;br /&gt;
====Scenario 3====&lt;br /&gt;
&lt;br /&gt;
1. Log in to Expertiza as a student. &lt;br /&gt;
&lt;br /&gt;
2. Go to URL and change the language from en to hi_IN. &lt;br /&gt;
&lt;br /&gt;
3. Check to see if the English strings on the page are translated to Hindi.&lt;br /&gt;
&lt;br /&gt;
4. While still logged in as a Student, check if the other Assignment related pages are also translated.&lt;br /&gt;
&lt;br /&gt;
====Scenario 4====&lt;br /&gt;
&lt;br /&gt;
1. Log in to Expertiza as a student. &lt;br /&gt;
&lt;br /&gt;
2. Go to URL and change the language from en to hi_IN. &lt;br /&gt;
&lt;br /&gt;
3. Check to see if the English strings on the page are translated to Hindi.&lt;br /&gt;
&lt;br /&gt;
4. While still logged in as a Student, check if the other Assignment related pages are also translated.&lt;br /&gt;
&lt;br /&gt;
5. Now change the language back from hi_IN to en in the URL. &lt;br /&gt;
&lt;br /&gt;
6. See if the Hindi strings are translated back to English for all Assignment related pages.&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
Due to time, there were some things we weren't able to fix or work on.&lt;br /&gt;
* Problems:&lt;br /&gt;
** When a student goes back to the main Assignment page, views/student_task/list, by clicking the link in the navigation bar, the language locale doesn't appear in the URL. This means that if you did change the language from the dropdown or manually, it will go back to the default locale language. See the URL below:&lt;br /&gt;
*** [[File:Internationalization assignment link langauge error.JPG]]&lt;br /&gt;
** If you try to use the language dropdown in a page other than the main Assignment page, it will give an error like the one shown below:&lt;br /&gt;
*** [[File:Internationalization langauge dropdown error.JPG]]&lt;br /&gt;
** But if you manually change the language in the URL, it works fine and persists as you navigate through the pages. &lt;br /&gt;
* Feature:&lt;br /&gt;
** We also have translated keys for many course pages, but did not implement the actual translation code in the view files for them. You should be able to look at the keys to find out which view files they are.&lt;br /&gt;
** Adding translation for Chinese.&lt;br /&gt;
*Additional Considerations(After our discussion during presentation):&lt;br /&gt;
**A future team needs to add support for dynamic text. Our project was only concerned with Expertiza's static text. The dynamic text needs to change too for a completely seamless end user experience.&lt;br /&gt;
**When generating translations, one must consider the differences in sentence structure between languages. In many cases throughout Expertiza we see the following pattern: &amp;lt;static_text&amp;gt;&amp;lt;dynamic_text&amp;gt;&amp;lt;static_text&amp;gt;. This is a difficult case to handle. What looks like a natural break in sentence structure in one language may not look natural in another. Dr. Gehringer mentioned the possibility of having that location of the dynamic text also be able to change between locales. This needs to be investigated by a future team. That may require a different API, or generating an entirely separate view for each locale(not ideal).&lt;br /&gt;
**When dealing with dynamic text two approaches need to be investigated(in addition to researching API suppport):&lt;br /&gt;
***Query the model in its default locale and attempt to match the string with a translation after retrieval(ideal). This would be the preferred approach. We don't want to have to alter our model to alter our translations. Barring API support, this might present complicated view code, but would be preferable to created dependency between the model and the translation.&lt;br /&gt;
***Store separate text fields in the model for each locale(not ideal). This is something we want to avoid. We should not be altering the model to add functionality to our views.&lt;br /&gt;
&lt;br /&gt;
== Links/References ==&lt;br /&gt;
&lt;br /&gt;
===Project Links===&lt;br /&gt;
&lt;br /&gt;
* Pull Request: https://github.com/expertiza/expertiza/pull/1286&lt;br /&gt;
* Github: https://github.com/mukhtar23/expertiza&lt;br /&gt;
* Video: https://youtu.be/TA9PkcK61QM&lt;br /&gt;
&lt;br /&gt;
===Support Material===&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#abstracting-localized-code https://guides.rubyonrails.org/i18n.html#abstracting-localized-code]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations]&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=HLb0hEgrXTc https://www.youtube.com/watch?v=HLb0hEgrXTc]&lt;br /&gt;
* [https://phraseapp.com/blog/posts/rails-i18n-guide/ https://phraseapp.com/blog/posts/rails-i18n-guide/]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=121522</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=121522"/>
		<updated>2018-12-15T02:49:47Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: /* Future Work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
===Team Members===&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Hasham Mukhtar (hmukhta@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Abhilasha Saini (asaini4@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Reddy Aravind Karnam Ganesh (rkarnam@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=== Mentor ===&lt;br /&gt;
&lt;br /&gt;
Zhewei Hu (zhu6@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
&lt;br /&gt;
config/locales/&lt;br /&gt;
&lt;br /&gt;
* en.yml&lt;br /&gt;
&lt;br /&gt;
* hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
config/&lt;br /&gt;
&lt;br /&gt;
* routes.rb&lt;br /&gt;
* application.rb&lt;br /&gt;
&lt;br /&gt;
app/controllers/&lt;br /&gt;
* applcation_controller.rb&lt;br /&gt;
&lt;br /&gt;
Student View Files:&lt;br /&gt;
&lt;br /&gt;
* app/views/&lt;br /&gt;
** shared/&lt;br /&gt;
*** _navigation.html.erb&lt;br /&gt;
** sign_up_sheet/&lt;br /&gt;
*** _suggested_topic.html.erb&lt;br /&gt;
*** _table_header.html.erb&lt;br /&gt;
*** list.html.erb&lt;br /&gt;
** student_task/&lt;br /&gt;
*** list.html.erb&lt;br /&gt;
*** view.html.erb&lt;br /&gt;
*** _publishing_rights.html.erb&lt;br /&gt;
** student_teams/&lt;br /&gt;
*** edit.html.erb&lt;br /&gt;
*** view.html.erb&lt;br /&gt;
** submitted_content/&lt;br /&gt;
*** _hyperlink.html.erb&lt;br /&gt;
*** _main.html.erb&lt;br /&gt;
*** _self_review.html.erb&lt;br /&gt;
*** _submitted_files.html.erb&lt;br /&gt;
*** _title.html.erb&lt;br /&gt;
*** edit.html.erb&lt;br /&gt;
** grades/&lt;br /&gt;
*** view_my_scores.html.erb&lt;br /&gt;
*** view_team.html.erb&lt;br /&gt;
** student_review/&lt;br /&gt;
*** list.html.erb&lt;br /&gt;
*** _responses.html.erb&lt;br /&gt;
*** _set_dynamic_review.html.erb&lt;br /&gt;
** participants/&lt;br /&gt;
*** change_handle.html.erb&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
Currently Expertiza only supports the English language. Many students are from other countries. So, we aimed to allow them to view their pages in another language. This is done by internationalizing static strings in Expertiza for Student Assignment related pages to another language (ex: Hindi or Chinese). Students had the ability to change the language through a dropdown located in navigation bar at the top of the page. We did not affect any strings that are dynamically shown. We focused on adding the Hindi language as a lot of students are Indian.&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;br /&gt;
&lt;br /&gt;
===Technical Design===&lt;br /&gt;
&lt;br /&gt;
====Allowing Student to change language for Assignment Pages====&lt;br /&gt;
&lt;br /&gt;
* We added a dropdown in the navigation bar for a student to use&lt;br /&gt;
* They are able to choose from English or Hindi&lt;br /&gt;
* [[File: Internationalization Navigation dropdown 2.JPG]]&lt;br /&gt;
* When the language is clicked on it changed all the static strings in the Student Views related to Assignments to the newly selected language.&lt;br /&gt;
* Students could also manually change the language in the URL themselves by. The language is put before the page name. Example: www.example.com/en/book -&amp;gt; www.example.com/hi_IN/book&lt;br /&gt;
&lt;br /&gt;
====Adding Multi-Language Support====&lt;br /&gt;
&lt;br /&gt;
* For this project, we added support for one language, Hindi. &lt;br /&gt;
* We used Google Translate to convert the strings to Hindi.&lt;br /&gt;
* We used the [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works Rails Internationalization (I18n) API] to help us add multi language support.&lt;br /&gt;
* There are two &amp;lt;code&amp;gt;yml&amp;lt;/code&amp;gt; files in the &amp;lt;code&amp;gt;config/locales&amp;lt;/code&amp;gt; directory representing the different languages that can be used in Expertiza.&lt;br /&gt;
** One for English, which will be the default language used, and another for Hindi. &lt;br /&gt;
*** &amp;lt;code&amp;gt;en.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;hi_IN.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
** These &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files contained the translated strings for their respective language.&lt;br /&gt;
* We editied the &amp;lt;code&amp;gt;routes.rb, application.rb, application_controller.rb&amp;lt;/code&amp;gt; files and all the view files related to Student Assignments (which you can see at the top of the wiki) so that it can read from the &amp;lt;code&amp;gt;yml&amp;lt;/code&amp;gt; files to show other languages.&lt;br /&gt;
------------------------------&lt;br /&gt;
* &amp;lt;code&amp;gt;application.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
** We've added the following two lines in the Recaptcha module of this file:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    config.i18n.available_locales = [:en,:hi_IN]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* This tells the application all the available locale &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; files that are supported. If you wanted to add more language support, you can just add it to the list shown here.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    config.i18n.default_locale = :en&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* The sets the default language for the application. Which in this case is English.&lt;br /&gt;
----------------------------&lt;br /&gt;
* &amp;lt;code&amp;gt;application_controller.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
** We added the following to this file to get translations to work:&lt;br /&gt;
&amp;lt;code&amp;gt; &lt;br /&gt;
  before_action :set_locale &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* This will call the set_locale method&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def set_locale&lt;br /&gt;
    I18n.locale = params[:locale] || I18n.default_locale&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* This sets the locale (language to use) for the application. The locale is taken from the URL query params list. If none is given, then it defaults to our default locale file (which is English). The application will always default to English and it won't pull from params until another language is chosen from the dropdown and sets :locale to something else. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def default_url_options(options={})&lt;br /&gt;
    {locale: I18n.locale}.merge options&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* This makes the URL always have a locale, which is set in the set_locale method, in it. This way the user doesn't have to manually enter a locale in the URL to translate the page. However, it adds the locale to the end of the URL like this: www.example.com/book/?locale=en. This is not something we want as it doesn't look good. This is fixed with routes.rb&lt;br /&gt;
-----------------------------&lt;br /&gt;
* &amp;lt;code&amp;gt; routes.rb &amp;lt;/code&amp;gt;&lt;br /&gt;
** We wrapped the file in &amp;lt;code&amp;gt; routes.rb &amp;lt;/code&amp;gt; with a &amp;lt;code&amp;gt;scope:&amp;lt;/code&amp;gt; so that the locale can be added before the page name in the URL. Something like this: www.example.com/en/book&lt;br /&gt;
** [[File:Internationalization Route rb 2.JPG]]&lt;br /&gt;
*** the code at the top prevents a Routing Error when you go to a page and don't specify the locale (www.example.com/book) and it allows the default locale to be used. It knows the available locales from line &amp;lt;code&amp;gt;/#{I18n.available_locales.join(&amp;quot;|&amp;quot;)} &amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt; available_locales &amp;lt;/code&amp;gt; was set in the &amp;lt;code&amp;gt;application.rb&amp;lt;/code&amp;gt; file&lt;br /&gt;
----------------------------&lt;br /&gt;
* &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; Files&lt;br /&gt;
** &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; files know to look at the &amp;lt;code&amp;gt;view&amp;lt;/code&amp;gt; folder when looking for keys to show&lt;br /&gt;
** Because of that, &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; files are structured in a hierarchy as shown below:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  locale_name:&lt;br /&gt;
    folder_name:&lt;br /&gt;
      html_page_name:&lt;br /&gt;
        key_name_for_string:&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Below is a sample for how we formatted our two locale files&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  en:&lt;br /&gt;
    student_task:&lt;br /&gt;
      list:&lt;br /&gt;
        assignments: &amp;quot;Assignments&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  hi_IN:&lt;br /&gt;
    student_task:&lt;br /&gt;
      list:&lt;br /&gt;
        assignments: &amp;quot;असाइनमेंट&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;student_task&amp;lt;/code&amp;gt; is the folder under views: &amp;lt;code&amp;gt;views/student_task&amp;lt;/code&amp;gt;&lt;br /&gt;
* list is the name of the html page: &amp;lt;code&amp;gt;view/student_task/list.html.erb&amp;lt;/code&amp;gt;&lt;br /&gt;
* assignments is the key that replaces the word &amp;quot;Assignments&amp;quot; in the code (see next section). &lt;br /&gt;
* If more keys are added, they would need to be added in this format&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
----------------------------&lt;br /&gt;
* Student Views were translated as shown below:&lt;br /&gt;
** Regular Static Strings&lt;br /&gt;
*** Take any static, hard coded strings, like this one: &amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt; Assignments &amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;, and replace &amp;quot;Assignment&amp;quot;, with &amp;lt;code&amp;gt;&amp;lt;%=t &amp;quot;.key_name&amp;quot; %&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
*** The new code would look like this &amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt;&amp;lt;%=t &amp;quot;.key_name&amp;quot; %&amp;gt;&amp;lt;/h1&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt; key_name &amp;lt;/code&amp;gt; comes from the key in the &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; files. The locale variable (en or hi_IN) would determine which one it pulls from.&lt;br /&gt;
*** This is how you would change the strings for an html page.&lt;br /&gt;
** Static strings for buttons, dropdowns, etc.&lt;br /&gt;
*** You can also translate static string field values that you would find in buttons, dropdowns, etc. When you change these types of strings, you need slightly different code to translate it. &lt;br /&gt;
*** Example: &amp;lt;code&amp;gt;&amp;lt;%= submit_tag 'Save' %&amp;gt; &amp;lt;/code&amp;gt;. You would replace 'Save' with &amp;lt;code&amp;gt;t('.key_name')&amp;lt;/code&amp;gt;. &lt;br /&gt;
*** It would now look like this &amp;lt;code&amp;gt; &amp;lt;%= submit_tag t('.key_name') %&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
** Other Info&lt;br /&gt;
*** Because the &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; know what view folders to look in when choosing the keys, when you type . for the key_namefor the translation code (shown above), it will show the list of keys available for the html page you are in, at least in RubyMine. &lt;br /&gt;
*** Reference keys in other html files (Look at below code for example)&lt;br /&gt;
**** You can reference keys under from another html file within the same sub view folder.&lt;br /&gt;
***** For example, you can reference the key &amp;lt;code&amp;gt;select_assignment&amp;lt;/code&amp;gt; from the &amp;lt;code&amp;gt;view/student_task/view.html.erb&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;view/student_task/list.html.erb&amp;lt;/code&amp;gt; by doing &amp;lt;code&amp;gt;&amp;lt;%=t &amp;quot;.view.select_assignment&amp;quot; %&amp;gt;&amp;lt;/code&amp;gt; for a static string in &amp;lt;code&amp;gt;view/student_task/list.html.erb&amp;lt;/code&amp;gt;&lt;br /&gt;
**** You can reference keys from another html file in a different sub view folder&lt;br /&gt;
***** For example, you can reference the key &amp;lt;code&amp;gt;sign_up&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;view/publishing/view.html.erb&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;view/student_task/list.html.erb&amp;lt;/code&amp;gt; from by doing &amp;lt;code&amp;gt;&amp;lt;%=t &amp;quot;.publishing.view.sign_up&amp;quot; %&amp;gt;&amp;lt;/code&amp;gt; for a static string in &amp;lt;code&amp;gt;view/student_task/list.html.erb&amp;lt;/code&amp;gt;&lt;br /&gt;
**** By referencing keys not in the html file you are working on, you can reduce duplicate key names.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  en:&lt;br /&gt;
    student_task&lt;br /&gt;
      list:&lt;br /&gt;
        assignment: &amp;quot;Assignment&amp;quot;&lt;br /&gt;
      view:&lt;br /&gt;
        select_assignment: &amp;quot;Select Assignment&amp;quot;&lt;br /&gt;
    publishing&lt;br /&gt;
      view:&lt;br /&gt;
        sign_up: &amp;quot;Sign Up&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Example Output===&lt;br /&gt;
&lt;br /&gt;
====Original Page====&lt;br /&gt;
[[File:Internationalization ssignment main page.JPG]]&lt;br /&gt;
&lt;br /&gt;
====Translated Page====&lt;br /&gt;
&lt;br /&gt;
[[File:Internationalization assignment main translated page.JPG]]&lt;br /&gt;
&lt;br /&gt;
===Test Plan===&lt;br /&gt;
&lt;br /&gt;
====Student Credentials====&lt;br /&gt;
username: student1016 or student[4000-8000]&lt;br /&gt;
&lt;br /&gt;
password: password&lt;br /&gt;
&lt;br /&gt;
====Before Testing====&lt;br /&gt;
&lt;br /&gt;
* When going between pages, use the Back button link located on the bottom of pages, not on the browser&lt;br /&gt;
* When going to the main Assignment page, use the Back button link to get there to test out the scenarios below, not the link in the navigation bar.&lt;br /&gt;
&lt;br /&gt;
====Scenario 1====&lt;br /&gt;
&lt;br /&gt;
1. Log in to Expertiza as a student. &lt;br /&gt;
&lt;br /&gt;
2. Go to language dropdown in the navigation bar and choose Hindi. &lt;br /&gt;
&lt;br /&gt;
3. Check if language is changed in the URL from en to hi_IN&lt;br /&gt;
&lt;br /&gt;
4. Check to see if the English strings on the page are translated to Hindi&lt;br /&gt;
&lt;br /&gt;
5. While still logged in as a Student, check if the other Assignment related pages are also translated.&lt;br /&gt;
&lt;br /&gt;
====Scenario 2====&lt;br /&gt;
&lt;br /&gt;
1. Log in to Expertiza as a student. &lt;br /&gt;
&lt;br /&gt;
2. Go to language dropdown in the navigation bar and choose Hindi. &lt;br /&gt;
&lt;br /&gt;
3. Check if language is changed in the URL from en to hi_IN&lt;br /&gt;
&lt;br /&gt;
4. Check to see if the English strings on the page are translated to Hindi&lt;br /&gt;
&lt;br /&gt;
5. While still logged in as a Student, check if the other Assignment related pages are also translated.&lt;br /&gt;
&lt;br /&gt;
6. Go back to the main Assignment page and choose English from the dropdown. &lt;br /&gt;
&lt;br /&gt;
7. See if the language was changed in the URL to en. &lt;br /&gt;
&lt;br /&gt;
8. See if the strings are translated back to English for all Assignment related pages. &lt;br /&gt;
&lt;br /&gt;
====Scenario 3====&lt;br /&gt;
&lt;br /&gt;
1. Log in to Expertiza as a student. &lt;br /&gt;
&lt;br /&gt;
2. Go to URL and change the language from en to hi_IN. &lt;br /&gt;
&lt;br /&gt;
3. Check to see if the English strings on the page are translated to Hindi.&lt;br /&gt;
&lt;br /&gt;
4. While still logged in as a Student, check if the other Assignment related pages are also translated.&lt;br /&gt;
&lt;br /&gt;
====Scenario 4====&lt;br /&gt;
&lt;br /&gt;
1. Log in to Expertiza as a student. &lt;br /&gt;
&lt;br /&gt;
2. Go to URL and change the language from en to hi_IN. &lt;br /&gt;
&lt;br /&gt;
3. Check to see if the English strings on the page are translated to Hindi.&lt;br /&gt;
&lt;br /&gt;
4. While still logged in as a Student, check if the other Assignment related pages are also translated.&lt;br /&gt;
&lt;br /&gt;
5. Now change the language back from hi_IN to en in the URL. &lt;br /&gt;
&lt;br /&gt;
6. See if the Hindi strings are translated back to English for all Assignment related pages.&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
Due to time, there were some things we weren't able to fix or work on.&lt;br /&gt;
* Problems:&lt;br /&gt;
** When a student goes back to the main Assignment page, views/student_task/list, by clicking the link in the navigation bar, the language locale doesn't appear in the URL. This means that if you did change the language from the dropdown or manually, it will go back to the default locale language. See the URL below:&lt;br /&gt;
*** [[File:Internationalization assignment link langauge error.JPG]]&lt;br /&gt;
** If you try to use the language dropdown in a page other than the main Assignment page, it will give an error like the one shown below:&lt;br /&gt;
*** [[File:Internationalization langauge dropdown error.JPG]]&lt;br /&gt;
** But if you manually change the language in the URL, it works fine and persists as you navigate through the pages. &lt;br /&gt;
* Feature:&lt;br /&gt;
** We also have translated keys for many course pages, but did not implement the actual translation code in the view files for them. You should be able to look at the keys to find out which view files they are.&lt;br /&gt;
** Adding translation for Chinese.&lt;br /&gt;
*Additional Considerations(After our discussion during presentation):&lt;br /&gt;
**A future team needs to add support for dynamic text. Our project was only concerned with Expertiza's static text. The dynamic text needs to change too for a completely seamless end user experience.&lt;br /&gt;
**When generating translations, one must consider the differences in sentence structure between languages. In many cases throughout Expertiza we see the following pattern: &amp;lt;static_text&amp;gt;&amp;lt;dynamic_text&amp;gt;&amp;lt;static_text&amp;gt;. This is a difficult case to handle. What looks like a natural break in sentence structure in one language may not look natural in another. Dr. Gehringer mentioned the possibility of having that location of the dynamic text also be able to change between locales. This needs to be investigated by a future team. That may require a different API, or generate an entirely separate view for each locale(not ideal).&lt;br /&gt;
**When dealing with dynamic text two approaches need to be investigated(in addition to researching API suppport):&lt;br /&gt;
***Query the model in its default locale and attempt to match the string with a translation after retrieval(ideal). This would be the preferred approach. We don't want to have to alter our model to alter our translations. Barring API support, this might present complicated view code, but would be preferable to created dependency between the model and the translation.&lt;br /&gt;
***Store separate text fields in the model for each locale(not ideal). This is something we want to avoid. We should not be altering the model to add functionality to our views.&lt;br /&gt;
&lt;br /&gt;
== Links/References ==&lt;br /&gt;
&lt;br /&gt;
===Project Links===&lt;br /&gt;
&lt;br /&gt;
* Pull Request: https://github.com/expertiza/expertiza/pull/1286&lt;br /&gt;
* Github: https://github.com/mukhtar23/expertiza&lt;br /&gt;
* Video: https://youtu.be/TA9PkcK61QM&lt;br /&gt;
&lt;br /&gt;
===Support Material===&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#abstracting-localized-code https://guides.rubyonrails.org/i18n.html#abstracting-localized-code]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations]&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=HLb0hEgrXTc https://www.youtube.com/watch?v=HLb0hEgrXTc]&lt;br /&gt;
* [https://phraseapp.com/blog/posts/rails-i18n-guide/ https://phraseapp.com/blog/posts/rails-i18n-guide/]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=121521</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=121521"/>
		<updated>2018-12-15T02:49:14Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: /* Future Work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
===Team Members===&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Hasham Mukhtar (hmukhta@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Abhilasha Saini (asaini4@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Reddy Aravind Karnam Ganesh (rkarnam@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=== Mentor ===&lt;br /&gt;
&lt;br /&gt;
Zhewei Hu (zhu6@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
&lt;br /&gt;
config/locales/&lt;br /&gt;
&lt;br /&gt;
* en.yml&lt;br /&gt;
&lt;br /&gt;
* hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
config/&lt;br /&gt;
&lt;br /&gt;
* routes.rb&lt;br /&gt;
* application.rb&lt;br /&gt;
&lt;br /&gt;
app/controllers/&lt;br /&gt;
* applcation_controller.rb&lt;br /&gt;
&lt;br /&gt;
Student View Files:&lt;br /&gt;
&lt;br /&gt;
* app/views/&lt;br /&gt;
** shared/&lt;br /&gt;
*** _navigation.html.erb&lt;br /&gt;
** sign_up_sheet/&lt;br /&gt;
*** _suggested_topic.html.erb&lt;br /&gt;
*** _table_header.html.erb&lt;br /&gt;
*** list.html.erb&lt;br /&gt;
** student_task/&lt;br /&gt;
*** list.html.erb&lt;br /&gt;
*** view.html.erb&lt;br /&gt;
*** _publishing_rights.html.erb&lt;br /&gt;
** student_teams/&lt;br /&gt;
*** edit.html.erb&lt;br /&gt;
*** view.html.erb&lt;br /&gt;
** submitted_content/&lt;br /&gt;
*** _hyperlink.html.erb&lt;br /&gt;
*** _main.html.erb&lt;br /&gt;
*** _self_review.html.erb&lt;br /&gt;
*** _submitted_files.html.erb&lt;br /&gt;
*** _title.html.erb&lt;br /&gt;
*** edit.html.erb&lt;br /&gt;
** grades/&lt;br /&gt;
*** view_my_scores.html.erb&lt;br /&gt;
*** view_team.html.erb&lt;br /&gt;
** student_review/&lt;br /&gt;
*** list.html.erb&lt;br /&gt;
*** _responses.html.erb&lt;br /&gt;
*** _set_dynamic_review.html.erb&lt;br /&gt;
** participants/&lt;br /&gt;
*** change_handle.html.erb&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
Currently Expertiza only supports the English language. Many students are from other countries. So, we aimed to allow them to view their pages in another language. This is done by internationalizing static strings in Expertiza for Student Assignment related pages to another language (ex: Hindi or Chinese). Students had the ability to change the language through a dropdown located in navigation bar at the top of the page. We did not affect any strings that are dynamically shown. We focused on adding the Hindi language as a lot of students are Indian.&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;br /&gt;
&lt;br /&gt;
===Technical Design===&lt;br /&gt;
&lt;br /&gt;
====Allowing Student to change language for Assignment Pages====&lt;br /&gt;
&lt;br /&gt;
* We added a dropdown in the navigation bar for a student to use&lt;br /&gt;
* They are able to choose from English or Hindi&lt;br /&gt;
* [[File: Internationalization Navigation dropdown 2.JPG]]&lt;br /&gt;
* When the language is clicked on it changed all the static strings in the Student Views related to Assignments to the newly selected language.&lt;br /&gt;
* Students could also manually change the language in the URL themselves by. The language is put before the page name. Example: www.example.com/en/book -&amp;gt; www.example.com/hi_IN/book&lt;br /&gt;
&lt;br /&gt;
====Adding Multi-Language Support====&lt;br /&gt;
&lt;br /&gt;
* For this project, we added support for one language, Hindi. &lt;br /&gt;
* We used Google Translate to convert the strings to Hindi.&lt;br /&gt;
* We used the [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works Rails Internationalization (I18n) API] to help us add multi language support.&lt;br /&gt;
* There are two &amp;lt;code&amp;gt;yml&amp;lt;/code&amp;gt; files in the &amp;lt;code&amp;gt;config/locales&amp;lt;/code&amp;gt; directory representing the different languages that can be used in Expertiza.&lt;br /&gt;
** One for English, which will be the default language used, and another for Hindi. &lt;br /&gt;
*** &amp;lt;code&amp;gt;en.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;hi_IN.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
** These &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files contained the translated strings for their respective language.&lt;br /&gt;
* We editied the &amp;lt;code&amp;gt;routes.rb, application.rb, application_controller.rb&amp;lt;/code&amp;gt; files and all the view files related to Student Assignments (which you can see at the top of the wiki) so that it can read from the &amp;lt;code&amp;gt;yml&amp;lt;/code&amp;gt; files to show other languages.&lt;br /&gt;
------------------------------&lt;br /&gt;
* &amp;lt;code&amp;gt;application.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
** We've added the following two lines in the Recaptcha module of this file:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    config.i18n.available_locales = [:en,:hi_IN]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* This tells the application all the available locale &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; files that are supported. If you wanted to add more language support, you can just add it to the list shown here.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    config.i18n.default_locale = :en&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* The sets the default language for the application. Which in this case is English.&lt;br /&gt;
----------------------------&lt;br /&gt;
* &amp;lt;code&amp;gt;application_controller.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
** We added the following to this file to get translations to work:&lt;br /&gt;
&amp;lt;code&amp;gt; &lt;br /&gt;
  before_action :set_locale &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* This will call the set_locale method&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def set_locale&lt;br /&gt;
    I18n.locale = params[:locale] || I18n.default_locale&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* This sets the locale (language to use) for the application. The locale is taken from the URL query params list. If none is given, then it defaults to our default locale file (which is English). The application will always default to English and it won't pull from params until another language is chosen from the dropdown and sets :locale to something else. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def default_url_options(options={})&lt;br /&gt;
    {locale: I18n.locale}.merge options&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* This makes the URL always have a locale, which is set in the set_locale method, in it. This way the user doesn't have to manually enter a locale in the URL to translate the page. However, it adds the locale to the end of the URL like this: www.example.com/book/?locale=en. This is not something we want as it doesn't look good. This is fixed with routes.rb&lt;br /&gt;
-----------------------------&lt;br /&gt;
* &amp;lt;code&amp;gt; routes.rb &amp;lt;/code&amp;gt;&lt;br /&gt;
** We wrapped the file in &amp;lt;code&amp;gt; routes.rb &amp;lt;/code&amp;gt; with a &amp;lt;code&amp;gt;scope:&amp;lt;/code&amp;gt; so that the locale can be added before the page name in the URL. Something like this: www.example.com/en/book&lt;br /&gt;
** [[File:Internationalization Route rb 2.JPG]]&lt;br /&gt;
*** the code at the top prevents a Routing Error when you go to a page and don't specify the locale (www.example.com/book) and it allows the default locale to be used. It knows the available locales from line &amp;lt;code&amp;gt;/#{I18n.available_locales.join(&amp;quot;|&amp;quot;)} &amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt; available_locales &amp;lt;/code&amp;gt; was set in the &amp;lt;code&amp;gt;application.rb&amp;lt;/code&amp;gt; file&lt;br /&gt;
----------------------------&lt;br /&gt;
* &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; Files&lt;br /&gt;
** &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; files know to look at the &amp;lt;code&amp;gt;view&amp;lt;/code&amp;gt; folder when looking for keys to show&lt;br /&gt;
** Because of that, &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; files are structured in a hierarchy as shown below:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  locale_name:&lt;br /&gt;
    folder_name:&lt;br /&gt;
      html_page_name:&lt;br /&gt;
        key_name_for_string:&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Below is a sample for how we formatted our two locale files&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  en:&lt;br /&gt;
    student_task:&lt;br /&gt;
      list:&lt;br /&gt;
        assignments: &amp;quot;Assignments&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  hi_IN:&lt;br /&gt;
    student_task:&lt;br /&gt;
      list:&lt;br /&gt;
        assignments: &amp;quot;असाइनमेंट&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;student_task&amp;lt;/code&amp;gt; is the folder under views: &amp;lt;code&amp;gt;views/student_task&amp;lt;/code&amp;gt;&lt;br /&gt;
* list is the name of the html page: &amp;lt;code&amp;gt;view/student_task/list.html.erb&amp;lt;/code&amp;gt;&lt;br /&gt;
* assignments is the key that replaces the word &amp;quot;Assignments&amp;quot; in the code (see next section). &lt;br /&gt;
* If more keys are added, they would need to be added in this format&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
----------------------------&lt;br /&gt;
* Student Views were translated as shown below:&lt;br /&gt;
** Regular Static Strings&lt;br /&gt;
*** Take any static, hard coded strings, like this one: &amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt; Assignments &amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;, and replace &amp;quot;Assignment&amp;quot;, with &amp;lt;code&amp;gt;&amp;lt;%=t &amp;quot;.key_name&amp;quot; %&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
*** The new code would look like this &amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt;&amp;lt;%=t &amp;quot;.key_name&amp;quot; %&amp;gt;&amp;lt;/h1&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt; key_name &amp;lt;/code&amp;gt; comes from the key in the &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; files. The locale variable (en or hi_IN) would determine which one it pulls from.&lt;br /&gt;
*** This is how you would change the strings for an html page.&lt;br /&gt;
** Static strings for buttons, dropdowns, etc.&lt;br /&gt;
*** You can also translate static string field values that you would find in buttons, dropdowns, etc. When you change these types of strings, you need slightly different code to translate it. &lt;br /&gt;
*** Example: &amp;lt;code&amp;gt;&amp;lt;%= submit_tag 'Save' %&amp;gt; &amp;lt;/code&amp;gt;. You would replace 'Save' with &amp;lt;code&amp;gt;t('.key_name')&amp;lt;/code&amp;gt;. &lt;br /&gt;
*** It would now look like this &amp;lt;code&amp;gt; &amp;lt;%= submit_tag t('.key_name') %&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
** Other Info&lt;br /&gt;
*** Because the &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; know what view folders to look in when choosing the keys, when you type . for the key_namefor the translation code (shown above), it will show the list of keys available for the html page you are in, at least in RubyMine. &lt;br /&gt;
*** Reference keys in other html files (Look at below code for example)&lt;br /&gt;
**** You can reference keys under from another html file within the same sub view folder.&lt;br /&gt;
***** For example, you can reference the key &amp;lt;code&amp;gt;select_assignment&amp;lt;/code&amp;gt; from the &amp;lt;code&amp;gt;view/student_task/view.html.erb&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;view/student_task/list.html.erb&amp;lt;/code&amp;gt; by doing &amp;lt;code&amp;gt;&amp;lt;%=t &amp;quot;.view.select_assignment&amp;quot; %&amp;gt;&amp;lt;/code&amp;gt; for a static string in &amp;lt;code&amp;gt;view/student_task/list.html.erb&amp;lt;/code&amp;gt;&lt;br /&gt;
**** You can reference keys from another html file in a different sub view folder&lt;br /&gt;
***** For example, you can reference the key &amp;lt;code&amp;gt;sign_up&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;view/publishing/view.html.erb&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;view/student_task/list.html.erb&amp;lt;/code&amp;gt; from by doing &amp;lt;code&amp;gt;&amp;lt;%=t &amp;quot;.publishing.view.sign_up&amp;quot; %&amp;gt;&amp;lt;/code&amp;gt; for a static string in &amp;lt;code&amp;gt;view/student_task/list.html.erb&amp;lt;/code&amp;gt;&lt;br /&gt;
**** By referencing keys not in the html file you are working on, you can reduce duplicate key names.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  en:&lt;br /&gt;
    student_task&lt;br /&gt;
      list:&lt;br /&gt;
        assignment: &amp;quot;Assignment&amp;quot;&lt;br /&gt;
      view:&lt;br /&gt;
        select_assignment: &amp;quot;Select Assignment&amp;quot;&lt;br /&gt;
    publishing&lt;br /&gt;
      view:&lt;br /&gt;
        sign_up: &amp;quot;Sign Up&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Example Output===&lt;br /&gt;
&lt;br /&gt;
====Original Page====&lt;br /&gt;
[[File:Internationalization ssignment main page.JPG]]&lt;br /&gt;
&lt;br /&gt;
====Translated Page====&lt;br /&gt;
&lt;br /&gt;
[[File:Internationalization assignment main translated page.JPG]]&lt;br /&gt;
&lt;br /&gt;
===Test Plan===&lt;br /&gt;
&lt;br /&gt;
====Student Credentials====&lt;br /&gt;
username: student1016 or student[4000-8000]&lt;br /&gt;
&lt;br /&gt;
password: password&lt;br /&gt;
&lt;br /&gt;
====Before Testing====&lt;br /&gt;
&lt;br /&gt;
* When going between pages, use the Back button link located on the bottom of pages, not on the browser&lt;br /&gt;
* When going to the main Assignment page, use the Back button link to get there to test out the scenarios below, not the link in the navigation bar.&lt;br /&gt;
&lt;br /&gt;
====Scenario 1====&lt;br /&gt;
&lt;br /&gt;
1. Log in to Expertiza as a student. &lt;br /&gt;
&lt;br /&gt;
2. Go to language dropdown in the navigation bar and choose Hindi. &lt;br /&gt;
&lt;br /&gt;
3. Check if language is changed in the URL from en to hi_IN&lt;br /&gt;
&lt;br /&gt;
4. Check to see if the English strings on the page are translated to Hindi&lt;br /&gt;
&lt;br /&gt;
5. While still logged in as a Student, check if the other Assignment related pages are also translated.&lt;br /&gt;
&lt;br /&gt;
====Scenario 2====&lt;br /&gt;
&lt;br /&gt;
1. Log in to Expertiza as a student. &lt;br /&gt;
&lt;br /&gt;
2. Go to language dropdown in the navigation bar and choose Hindi. &lt;br /&gt;
&lt;br /&gt;
3. Check if language is changed in the URL from en to hi_IN&lt;br /&gt;
&lt;br /&gt;
4. Check to see if the English strings on the page are translated to Hindi&lt;br /&gt;
&lt;br /&gt;
5. While still logged in as a Student, check if the other Assignment related pages are also translated.&lt;br /&gt;
&lt;br /&gt;
6. Go back to the main Assignment page and choose English from the dropdown. &lt;br /&gt;
&lt;br /&gt;
7. See if the language was changed in the URL to en. &lt;br /&gt;
&lt;br /&gt;
8. See if the strings are translated back to English for all Assignment related pages. &lt;br /&gt;
&lt;br /&gt;
====Scenario 3====&lt;br /&gt;
&lt;br /&gt;
1. Log in to Expertiza as a student. &lt;br /&gt;
&lt;br /&gt;
2. Go to URL and change the language from en to hi_IN. &lt;br /&gt;
&lt;br /&gt;
3. Check to see if the English strings on the page are translated to Hindi.&lt;br /&gt;
&lt;br /&gt;
4. While still logged in as a Student, check if the other Assignment related pages are also translated.&lt;br /&gt;
&lt;br /&gt;
====Scenario 4====&lt;br /&gt;
&lt;br /&gt;
1. Log in to Expertiza as a student. &lt;br /&gt;
&lt;br /&gt;
2. Go to URL and change the language from en to hi_IN. &lt;br /&gt;
&lt;br /&gt;
3. Check to see if the English strings on the page are translated to Hindi.&lt;br /&gt;
&lt;br /&gt;
4. While still logged in as a Student, check if the other Assignment related pages are also translated.&lt;br /&gt;
&lt;br /&gt;
5. Now change the language back from hi_IN to en in the URL. &lt;br /&gt;
&lt;br /&gt;
6. See if the Hindi strings are translated back to English for all Assignment related pages.&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
Due to time, there were some things we weren't able to fix or work on.&lt;br /&gt;
* Problems:&lt;br /&gt;
** When a student goes back to the main Assignment page, views/student_task/list, by clicking the link in the navigation bar, the language locale doesn't appear in the URL. This means that if you did change the language from the dropdown or manually, it will go back to the default locale language. See the URL below:&lt;br /&gt;
*** [[File:Internationalization assignment link langauge error.JPG]]&lt;br /&gt;
** If you try to use the language dropdown in a page other than the main Assignment page, it will give an error like the one shown below:&lt;br /&gt;
*** [[File:Internationalization langauge dropdown error.JPG]]&lt;br /&gt;
** But if you manually change the language in the URL, it works fine and persists as you navigate through the pages. &lt;br /&gt;
* Feature:&lt;br /&gt;
** We also have translated keys for many course pages, but did not implement the actual translation code in the view files for them. You should be able to look at the keys to find out which view files they are.&lt;br /&gt;
** Adding translation for Chinese.&lt;br /&gt;
*Additional Considerations(After our discussion during presentation):&lt;br /&gt;
**A future team needs to add support for dynamic text. Our project was only concerned with Expertiza's static text. The dynamic text needs to change too for a completely seamless end user experience.&lt;br /&gt;
**When generating translations, one must consider the differences in sentence structure between languages. In many cases throughout Expertiza we see the following pattern: &amp;lt;static_text&amp;gt;&amp;lt;dynamic_text&amp;gt;&amp;lt;static_text&amp;gt;. This is a difficult case to handle. What looks like a natural break in sentence structure in one language may not look natural in another. Dr. Gehringer mentioned the possibility of having that location of the dynamic text also be able to change between locales. This needs to be investigated by a future team. That may require a different API, or generate an entirely separate view for each locale(not ideal).&lt;br /&gt;
&lt;br /&gt;
**When dealing with dynamic text two approaches need to be investigated(in addition to researching API suppport):&lt;br /&gt;
***Query the model in its default locale and attempt to match the string with a translation after retrieval(ideal). This would be the preferred approach. We don't want to have to alter our model to alter our translations. Barring API support, this might present complicated view code, but would be preferable to created dependency between the model and the translation.&lt;br /&gt;
***Store separate text fields in the model for each locale(not ideal). This is something we want to avoid. We should not be altering the model to add functionality to our views.&lt;br /&gt;
&lt;br /&gt;
== Links/References ==&lt;br /&gt;
&lt;br /&gt;
===Project Links===&lt;br /&gt;
&lt;br /&gt;
* Pull Request: https://github.com/expertiza/expertiza/pull/1286&lt;br /&gt;
* Github: https://github.com/mukhtar23/expertiza&lt;br /&gt;
* Video: https://youtu.be/TA9PkcK61QM&lt;br /&gt;
&lt;br /&gt;
===Support Material===&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#abstracting-localized-code https://guides.rubyonrails.org/i18n.html#abstracting-localized-code]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations]&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=HLb0hEgrXTc https://www.youtube.com/watch?v=HLb0hEgrXTc]&lt;br /&gt;
* [https://phraseapp.com/blog/posts/rails-i18n-guide/ https://phraseapp.com/blog/posts/rails-i18n-guide/]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=121079</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=121079"/>
		<updated>2018-12-06T20:33:52Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: /* Project Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
===Team Members===&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Hasham Mukhtar (hmukhta@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Abhilasha Saini (asaini4@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Reddy Aravind Karnam Ganesh (rkarnam@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=== Mentor ===&lt;br /&gt;
&lt;br /&gt;
Zhewei Hu (zhu6@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
&lt;br /&gt;
config/locales/&lt;br /&gt;
&lt;br /&gt;
* en.yml&lt;br /&gt;
&lt;br /&gt;
* hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
config/&lt;br /&gt;
&lt;br /&gt;
* routes.rb&lt;br /&gt;
* application.rb&lt;br /&gt;
&lt;br /&gt;
app/controllers/&lt;br /&gt;
* applcation_controller.rb&lt;br /&gt;
&lt;br /&gt;
Student View Files:&lt;br /&gt;
&lt;br /&gt;
* app/views/&lt;br /&gt;
** shared/&lt;br /&gt;
*** _navigation.html.erb&lt;br /&gt;
** sign_up_sheet/&lt;br /&gt;
*** _suggested_topic.html.erb&lt;br /&gt;
*** _table_header.html.erb&lt;br /&gt;
*** list.html.erb&lt;br /&gt;
** student_task/&lt;br /&gt;
*** list.html.erb&lt;br /&gt;
*** view.html.erb&lt;br /&gt;
*** _publishing_rights.html.erb&lt;br /&gt;
** student_teams/&lt;br /&gt;
*** edit.html.erb&lt;br /&gt;
*** view.html.erb&lt;br /&gt;
** submitted_content/&lt;br /&gt;
*** _hyperlink.html.erb&lt;br /&gt;
*** _main.html.erb&lt;br /&gt;
*** _self_review.html.erb&lt;br /&gt;
*** _submitted_files.html.erb&lt;br /&gt;
*** _title.html.erb&lt;br /&gt;
*** edit.html.erb&lt;br /&gt;
** grades/&lt;br /&gt;
*** view_my_scores.html.erb&lt;br /&gt;
*** view_team.html.erb&lt;br /&gt;
** student_review/&lt;br /&gt;
*** list.html.erb&lt;br /&gt;
*** _responses.html.erb&lt;br /&gt;
*** _set_dynamic_review.html.erb&lt;br /&gt;
** participants/&lt;br /&gt;
*** change_handle.html.erb&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
Currently Expertiza only supports the English language. Many students are from other countries. So, we aimed to allow them to view their pages in another language. This is done by internationalizing static strings in Expertiza for Student Assignment related pages to another language (ex: Hindi or Chinese). Students had the ability to change the language through a dropdown located in navigation bar at the top of the page. We did not affect any strings that are dynamically shown. We focused on adding the Hindi language as a lot of students are Indian.&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;br /&gt;
&lt;br /&gt;
===Technical Design===&lt;br /&gt;
&lt;br /&gt;
====Allowing Student to change language for Assignment Pages====&lt;br /&gt;
&lt;br /&gt;
* We added a dropdown in the navigation bar for a student to use&lt;br /&gt;
* They are able to choose from English or Hindi&lt;br /&gt;
* [[File: Internationalization Navigation dropdown 2.JPG]]&lt;br /&gt;
* When the language is clicked on it changed all the static strings in the Student Views related to Assignments to the newly selected language.&lt;br /&gt;
* Students could also manually change the language in the URL themselves by. The language is put before the page name. Example: www.example.com/en/book -&amp;gt; www.example.com/hi_IN/book&lt;br /&gt;
&lt;br /&gt;
====Adding Multi-Language Support====&lt;br /&gt;
&lt;br /&gt;
* For this project, we added support for one language, Hindi. &lt;br /&gt;
* We used Google Translate to convert the strings to Hindi.&lt;br /&gt;
* We used the [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works Rails Internationalization (I18n) API] to help us add multi language support.&lt;br /&gt;
* There are two &amp;lt;code&amp;gt;yml&amp;lt;/code&amp;gt; files in the &amp;lt;code&amp;gt;config/locales&amp;lt;/code&amp;gt; directory representing the different languages that can be used in Expertiza.&lt;br /&gt;
** One for English, which will be the default language used, and another for Hindi. &lt;br /&gt;
*** &amp;lt;code&amp;gt;en.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;hi_IN.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
** These &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files contained the translated strings for their respective language.&lt;br /&gt;
* We editied the &amp;lt;code&amp;gt;routes.rb, application.rb, application_controller.rb&amp;lt;/code&amp;gt; files and all the view files related to Student Assignments (which you can see at the top of the wiki) so that it can read from the &amp;lt;code&amp;gt;yml&amp;lt;/code&amp;gt; files to show other languages.&lt;br /&gt;
------------------------------&lt;br /&gt;
* &amp;lt;code&amp;gt;application.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
** We've added the following two lines in the Recaptcha module of this file:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    config.i18n.available_locales = [:en,:hi_IN]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* This tells the application all the available locale &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; files that are supported. If you wanted to add more language support, you can just add it to the list shown here.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    config.i18n.default_locale = :en&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* The sets the default language for the application. Which in this case is English.&lt;br /&gt;
----------------------------&lt;br /&gt;
* &amp;lt;code&amp;gt;application_controller.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
** We added the following to this file to get translations to work:&lt;br /&gt;
&amp;lt;code&amp;gt; &lt;br /&gt;
  before_action :set_locale &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* This will call the set_locale method&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def set_locale&lt;br /&gt;
    I18n.locale = params[:locale] || I18n.default_locale&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* This sets the locale (language to use) for the application. The locale is taken from the URL query params list. If none is given, then it defaults to our default locale file (which is English). The application will always default to English and it won't pull from params until another language is chosen from the dropdown and sets :locale to something else. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  def default_url_options(options={})&lt;br /&gt;
    {locale: I18n.locale}.merge options&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* This makes the URL always have a locale, which is set in the set_locale method, in it. This way the user doesn't have to manually enter a locale in the URL to translate the page. However, it adds the locale to the end of the URL like this: www.example.com/book/?locale=en. This is not something we want as it doesn't look good. This is fixed with routes.rb&lt;br /&gt;
-----------------------------&lt;br /&gt;
* &amp;lt;code&amp;gt; routes.rb &amp;lt;/code&amp;gt;&lt;br /&gt;
** We wrapped the file in &amp;lt;code&amp;gt; routes.rb &amp;lt;/code&amp;gt; with a &amp;lt;code&amp;gt;scope:&amp;lt;/code&amp;gt; so that the locale can be added before the page name in the URL. Something like this: www.example.com/en/book&lt;br /&gt;
** [[File:Internationalization Route rb 2.JPG]]&lt;br /&gt;
*** the code at the top prevents a Routing Error when you go to a page and don't specify the locale (www.example.com/book) and it allows the default locale to be used. It knows the available locales from line &amp;lt;code&amp;gt;/#{I18n.available_locales.join(&amp;quot;|&amp;quot;)} &amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt; available_locales &amp;lt;/code&amp;gt; was set in the &amp;lt;code&amp;gt;application.rb&amp;lt;/code&amp;gt; file&lt;br /&gt;
----------------------------&lt;br /&gt;
* &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; Files&lt;br /&gt;
** &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; files know to look at the &amp;lt;code&amp;gt;view&amp;lt;/code&amp;gt; folder when looking for keys to show&lt;br /&gt;
** Because of that, &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; files are structured in a hierarchy as shown below:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  locale_name:&lt;br /&gt;
    folder_name:&lt;br /&gt;
      html_page_name:&lt;br /&gt;
        key_name_for_string:&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Below is a sample for how we formatted our two locale files&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  en:&lt;br /&gt;
    student_task:&lt;br /&gt;
      list:&lt;br /&gt;
        assignments: &amp;quot;Assignments&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  hi_IN:&lt;br /&gt;
    student_task:&lt;br /&gt;
      list:&lt;br /&gt;
        assignments: &amp;quot;असाइनमेंट&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* student_task is the folder under views: views/student_task&lt;br /&gt;
* list is the name of the html page: view/student_task/list.html.erb&lt;br /&gt;
* assignments is the key that replaces the word &amp;quot;Assignments&amp;quot; in the code (see next section). &lt;br /&gt;
* If more keys are added, they would need to be added in this format&lt;br /&gt;
&lt;br /&gt;
----------------------------&lt;br /&gt;
* Student Views were translated as shown below:&lt;br /&gt;
** Regular Static Strings&lt;br /&gt;
*** Take any static, hard coded strings, like this one: &amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt; Assignments &amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;, and replace &amp;quot;Assignment&amp;quot;, with &amp;lt;code&amp;gt;&amp;lt;%=t &amp;quot;.keyName&amp;quot; %&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
*** The new code would look like this &amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt;&amp;lt;%=t &amp;quot;.key_name&amp;quot; %&amp;gt;&amp;lt;/h1&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt; key_name &amp;lt;/code&amp;gt; comes from the key in the &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt; files. The locale variable (en or hi_IN) would determine which one it pulls from.&lt;br /&gt;
*** This is how you would change the strings for an html page.&lt;br /&gt;
** Static strings for buttons, dropdowns, etc.&lt;br /&gt;
*** You can also translate static string field values that you would find in buttons, dropdowns, etc. When you change these types of strings, you need slightly different code to translate it. &lt;br /&gt;
*** Example: &amp;lt;code&amp;gt;&amp;lt;%= submit_tag 'Save' %&amp;gt; &amp;lt;/code&amp;gt;. You would replace 'Save' with &amp;lt;code&amp;gt;t('.key_name')&amp;lt;/code&amp;gt;. &lt;br /&gt;
*** It would now look like this &amp;lt;code&amp;gt; &amp;lt;%= submit_tag t('.key_name') %&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Example Output===&lt;br /&gt;
&lt;br /&gt;
====Original Page====&lt;br /&gt;
[[File:Internationalization ssignment main page.JPG]]&lt;br /&gt;
&lt;br /&gt;
====Translated Page====&lt;br /&gt;
&lt;br /&gt;
[[File:Internationalization assignment main translated page.JPG]]&lt;br /&gt;
&lt;br /&gt;
===Test Plan===&lt;br /&gt;
&lt;br /&gt;
====Student Credentials====&lt;br /&gt;
username: student1016 or student[4000-8000]&lt;br /&gt;
&lt;br /&gt;
password: password&lt;br /&gt;
&lt;br /&gt;
====Before Testing====&lt;br /&gt;
&lt;br /&gt;
* When going between pages, use the Back button link located on the bottom of pages, not on the browser&lt;br /&gt;
* When going to the main Assignment page, use the Back button link to get there to test out the scenarios below, not the link in the navigation bar.&lt;br /&gt;
&lt;br /&gt;
====Scenario 1====&lt;br /&gt;
&lt;br /&gt;
1. Log in to Expertiza as a student. &lt;br /&gt;
&lt;br /&gt;
2. Go to language dropdown in the navigation bar and choose Hindi. &lt;br /&gt;
&lt;br /&gt;
3. Check if language is changed in the URL from en to hi_IN&lt;br /&gt;
&lt;br /&gt;
4. Check to see if the English strings on the page are translated to Hindi&lt;br /&gt;
&lt;br /&gt;
5. While still logged in as a Student, check if the other Assignment related pages are also translated.&lt;br /&gt;
&lt;br /&gt;
====Scenario 2====&lt;br /&gt;
&lt;br /&gt;
1. Log in to Expertiza as a student. &lt;br /&gt;
&lt;br /&gt;
2. Go to language dropdown in the navigation bar and choose Hindi. &lt;br /&gt;
&lt;br /&gt;
3. Check if language is changed in the URL from en to hi_IN&lt;br /&gt;
&lt;br /&gt;
4. Check to see if the English strings on the page are translated to Hindi&lt;br /&gt;
&lt;br /&gt;
5. While still logged in as a Student, check if the other Assignment related pages are also translated.&lt;br /&gt;
&lt;br /&gt;
6. Go back to the main Assignment page and choose English from the dropdown. &lt;br /&gt;
&lt;br /&gt;
7. See if the language was changed in the URL to en. &lt;br /&gt;
&lt;br /&gt;
8. See if the strings are translated back to English for all Assignment related pages. &lt;br /&gt;
&lt;br /&gt;
====Scenario 3====&lt;br /&gt;
&lt;br /&gt;
1. Log in to Expertiza as a student. &lt;br /&gt;
&lt;br /&gt;
2. Go to URL and change the language from en to hi_IN. &lt;br /&gt;
&lt;br /&gt;
3. Check to see if the English strings on the page are translated to Hindi.&lt;br /&gt;
&lt;br /&gt;
4. While still logged in as a Student, check if the other Assignment related pages are also translated.&lt;br /&gt;
&lt;br /&gt;
====Scenario 4====&lt;br /&gt;
&lt;br /&gt;
1. Log in to Expertiza as a student. &lt;br /&gt;
&lt;br /&gt;
2. Go to URL and change the language from en to hi_IN. &lt;br /&gt;
&lt;br /&gt;
3. Check to see if the English strings on the page are translated to Hindi.&lt;br /&gt;
&lt;br /&gt;
4. While still logged in as a Student, check if the other Assignment related pages are also translated.&lt;br /&gt;
&lt;br /&gt;
5. Now change the language back from hi_IN to en in the URL. &lt;br /&gt;
&lt;br /&gt;
6. See if the Hindi strings are translated back to English for all Assignment related pages.&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
&lt;br /&gt;
Due to time, there were some things we weren't able to fix or work on.&lt;br /&gt;
* Problems:&lt;br /&gt;
** When a student goes back to the main Assignment page, views/student_task/list, by clicking the link in the navigation bar, the language locale doesn't appear in the URL. This means that if you did change the language from the dropdown or manually, it will go back to the default locale language. See the URL below:&lt;br /&gt;
*** [[File:Internationalization assignment link langauge error.JPG]]&lt;br /&gt;
** If you try to use the language dropdown in a page other than the main Assignment page, it will give an error like the one shown below:&lt;br /&gt;
*** [[File:Internationalization langauge dropdown error.JPG]]&lt;br /&gt;
** But if you manually change the language in the URL, it works fine and persists as you navigate through the pages. &lt;br /&gt;
* Feature:&lt;br /&gt;
** Having a translation only show up for the user who changes it and not in the entire system.&lt;br /&gt;
** We also have translated keys for many course pages, but did not implement the actual translation code in the view files for them. You should be able to look at the keys to find out which view files they are.&lt;br /&gt;
** Adding translation for Chinese.&lt;br /&gt;
&lt;br /&gt;
== Links/References ==&lt;br /&gt;
&lt;br /&gt;
===Project Links===&lt;br /&gt;
&lt;br /&gt;
* Pull Request: https://github.com/expertiza/expertiza/pull/1286&lt;br /&gt;
* Github: https://github.com/mukhtar23/expertiza&lt;br /&gt;
* Video: https://youtu.be/TA9PkcK61QM&lt;br /&gt;
&lt;br /&gt;
===Support Material===&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#abstracting-localized-code https://guides.rubyonrails.org/i18n.html#abstracting-localized-code]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations]&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=HLb0hEgrXTc https://www.youtube.com/watch?v=HLb0hEgrXTc]&lt;br /&gt;
* [https://phraseapp.com/blog/posts/rails-i18n-guide/ https://phraseapp.com/blog/posts/rails-i18n-guide/]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119547</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119547"/>
		<updated>2018-11-13T01:34:23Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
===Team Members===&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Hasham Mukhtar (hmukhta@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Abhilasha Saini (asaini4@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Reddy Aravind Karnam Ganesh (rkarnam@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
&lt;br /&gt;
config/locales&lt;br /&gt;
&lt;br /&gt;
routes.rb&lt;br /&gt;
&lt;br /&gt;
all view files&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
Currently Expertiza only supports creating courses in the English language. Many Expertiza users are from other countries. We aim to allow instructors to create courses in other languages. This will be done by internationalizing static strings in Expertiza to another language (ex: Hindi or Chinese). Instructors will have the ability to change the language for a course in the Edit Course page through a dropdown. We will not be affecting any strings that are dynamically shown and are not changing any English strings in the actual code.&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;br /&gt;
&lt;br /&gt;
===Technical Design===&lt;br /&gt;
&lt;br /&gt;
====Allowing instructor to change language for a course====&lt;br /&gt;
&lt;br /&gt;
* We will add a &amp;lt;code&amp;gt;language&amp;lt;/code&amp;gt; column to the &amp;lt;code&amp;gt;Courses&amp;lt;/code&amp;gt; Table.&lt;br /&gt;
* Then we will add a dropdown of languages to the Edit Course page for an instructor to use.&lt;br /&gt;
* When an instructor updates the Edit Course page with a chosen language picked, it will translate all the static strings in the Expertiza application to that new language.&lt;br /&gt;
&lt;br /&gt;
====Adding Multi-Language Support====&lt;br /&gt;
&lt;br /&gt;
* For this project, we will be adding support for one language right now, Hindi. &lt;br /&gt;
* We will be using the [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works Rails Internationalization (I18n) API] to help us add multi language support.&lt;br /&gt;
* There will be two &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files in the &amp;lt;code&amp;gt;config/locales&amp;lt;/code&amp;gt; directory representing the different languages that can be used in Expertiza.&lt;br /&gt;
** One for English, which will be the default language used, and another for Hindi. &lt;br /&gt;
*** &amp;lt;code&amp;gt;en.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;hi_IN.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
** These &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files contain the translated strings for their respective language.&lt;br /&gt;
* We will be editing the &amp;lt;code&amp;gt;routes.rb&amp;lt;/code&amp;gt; file and all the view files so that it can read from the &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files to show other languages.&lt;br /&gt;
&lt;br /&gt;
===Example Output===&lt;br /&gt;
&lt;br /&gt;
====Original Page====&lt;br /&gt;
[[File:Edit Course default.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Language Dropdown====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock en.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Translated Page====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock hi IN.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Links/References ==&lt;br /&gt;
&lt;br /&gt;
===Project Links===&lt;br /&gt;
&lt;br /&gt;
* Pull Request:&lt;br /&gt;
* Github: https://github.com/mukhtar23/expertiza&lt;br /&gt;
* Video:&lt;br /&gt;
&lt;br /&gt;
===Support Material===&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#abstracting-localized-code https://guides.rubyonrails.org/i18n.html#abstracting-localized-code]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119545</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119545"/>
		<updated>2018-11-13T01:33:57Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
===Team Members===&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Hasham Mukhtar (hmukhta@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Abhilasha Saini (asaini4@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Reddy Aravind Karnam Ganesh (rkarnam@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
&lt;br /&gt;
config/locales&lt;br /&gt;
&lt;br /&gt;
routes.rb&lt;br /&gt;
&lt;br /&gt;
all view files&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
Currently Expertiza only supports creating courses in the English language. Many Expertiza users are from other countries. We aim to allow instructors to create courses in other languages. This will be done by internationalizing static strings in Expertiza to another language (ex: Hindi or Chinese). Instructors will have the ability to change the language for a course in the Edit Course page through a dropdown. We will not be affecting any strings that are dynamically shown and are not changing any English strings in the actual code.&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;br /&gt;
&lt;br /&gt;
===Technical Design===&lt;br /&gt;
&lt;br /&gt;
====Allowing instructor to change language for a course====&lt;br /&gt;
&lt;br /&gt;
* We will add a &amp;lt;code&amp;gt;language&amp;lt;/code&amp;gt; column to the &amp;lt;code&amp;gt;Courses&amp;lt;/code&amp;gt; Table.&lt;br /&gt;
* Then we will add a dropdown of languages to the Edit Course page for an instructor to use.&lt;br /&gt;
* When an instructor updates the Edit Course page with a chosen language picked, it will translate all the static strings in the Expertiza application to that new language.&lt;br /&gt;
&lt;br /&gt;
====Adding Multi-Language Support====&lt;br /&gt;
&lt;br /&gt;
* For this project, we will be adding support for one language right now, Hindi. &lt;br /&gt;
* We will be using the [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works Rails Internationalization (I18n) API] to help us add multi language support.&lt;br /&gt;
* There will be two &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files in the &amp;lt;code&amp;gt;config/locales&amp;lt;/code&amp;gt; directory representing the different languages that can be used in Expertiza.&lt;br /&gt;
** One for English, which will be the default language used, and another for Hindi. &lt;br /&gt;
*** &amp;lt;code&amp;gt;en.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;hi_IN.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
** These &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files contain the translated strings for their respective language.&lt;br /&gt;
* We will be editing the &amp;lt;code&amp;gt;routes.rb&amp;lt;/code&amp;gt; file and all the view files so that it can read from the &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files to show other languages.&lt;br /&gt;
&lt;br /&gt;
===Example Output===&lt;br /&gt;
&lt;br /&gt;
====Original Page====&lt;br /&gt;
[[File:Edit Course default.PNG]&lt;br /&gt;
&lt;br /&gt;
====Language Dropdown====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock en.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Translated Page====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock hi IN.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Links/References ==&lt;br /&gt;
&lt;br /&gt;
===Project Links===&lt;br /&gt;
&lt;br /&gt;
* Pull Request:&lt;br /&gt;
* Github: https://github.com/mukhtar23/expertiza&lt;br /&gt;
* Video:&lt;br /&gt;
&lt;br /&gt;
===Support Material===&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#abstracting-localized-code https://guides.rubyonrails.org/i18n.html#abstracting-localized-code]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119531</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119531"/>
		<updated>2018-11-12T22:03:36Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
===Team Members===&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Hasham Mukhtar (hmukhta@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Abhilasha Saini (asaini4@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Reddy Aravind Karnam Ganesh (rkarnam@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
&lt;br /&gt;
config/locales&lt;br /&gt;
&lt;br /&gt;
routes.rb&lt;br /&gt;
&lt;br /&gt;
all view files&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
Currently Expertiza only supports creating courses in the English language. Many Expertiza users are from other countries. We aim to allow instructors to create courses in other languages. This will be done by internationalizing static strings in Expertiza to another language (ex: Hindi or Chinese). Instructors will have the ability to change the language for a course in the Edit Course page through a dropdown. We will not be affecting any strings that are dynamically shown and are not changing any English strings in the actual code.&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;br /&gt;
&lt;br /&gt;
===Technical Design===&lt;br /&gt;
&lt;br /&gt;
====Allowing instructor to change language for a course====&lt;br /&gt;
&lt;br /&gt;
* We will add a &amp;lt;code&amp;gt;language&amp;lt;/code&amp;gt; column to the &amp;lt;code&amp;gt;Courses&amp;lt;/code&amp;gt; Table.&lt;br /&gt;
* Then we will add a dropdown of languages to the Edit Course page for an instructor to use.&lt;br /&gt;
* When an instructor updates the Edit Course page with a chosen language picked, it will translate all the static strings in the Expertiza application to that new language.&lt;br /&gt;
&lt;br /&gt;
====Adding Multi-Language Support====&lt;br /&gt;
&lt;br /&gt;
* For this project, we will be adding support for one language right now, Hindi. &lt;br /&gt;
* We will be using the [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works Rails Internationalization (I18n) API] to help us add multi language support.&lt;br /&gt;
* There will be two &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files in the &amp;lt;code&amp;gt;config/locales&amp;lt;/code&amp;gt; directory representing the different languages that can be used in Expertiza.&lt;br /&gt;
** One for English, which will be the default language used, and another for Hindi. &lt;br /&gt;
*** &amp;lt;code&amp;gt;en.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;hi_IN.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
** These &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files contain the translated strings for their respective language.&lt;br /&gt;
* We will be editing the &amp;lt;code&amp;gt;routes.rb&amp;lt;/code&amp;gt; file and all the view files so that it can read from the &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files to show other languages.&lt;br /&gt;
&lt;br /&gt;
===Example Output===&lt;br /&gt;
&lt;br /&gt;
====Original Page====&lt;br /&gt;
[[File:Edit Course default.PNG|left|frame|100px]]&lt;br /&gt;
&lt;br /&gt;
====Language Dropdown====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock en.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Translated Page====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock hi IN.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Links/References ==&lt;br /&gt;
&lt;br /&gt;
===Project Links===&lt;br /&gt;
&lt;br /&gt;
* Pull Request:&lt;br /&gt;
* Github: https://github.com/mukhtar23/expertiza&lt;br /&gt;
* Video:&lt;br /&gt;
&lt;br /&gt;
===Support Material===&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#abstracting-localized-code https://guides.rubyonrails.org/i18n.html#abstracting-localized-code]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119530</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119530"/>
		<updated>2018-11-12T22:02:44Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
===Team Members===&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Hasham Mukhtar (hmukhta@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Abhilasha Saini (asaini4@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Reddy Aravind Karnam Ganesh (rkarnam@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
&lt;br /&gt;
config/locales&lt;br /&gt;
&lt;br /&gt;
routes.rb&lt;br /&gt;
&lt;br /&gt;
all view files&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
Currently Expertiza only supports creating courses in the English language. Many Expertiza users are from other countries. We aim to allow instructors to create courses in other languages. This will be done by internationalizing static strings in Expertiza to another language (ex: Hindi or Chinese). Instructors will have the ability to change the language for a course in the Edit Course page through a dropdown. We will not be affecting any strings that are dynamically shown and are not changing any English strings in the actual code.&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;br /&gt;
&lt;br /&gt;
===Technical Design===&lt;br /&gt;
&lt;br /&gt;
====Allowing instructor to change language for a course====&lt;br /&gt;
&lt;br /&gt;
* We will add a &amp;lt;code&amp;gt;language&amp;lt;/code&amp;gt; column to the &amp;lt;code&amp;gt;Courses&amp;lt;/code&amp;gt; Table.&lt;br /&gt;
* Then we will add a dropdown of languages to the Edit Course page for an instructor to use.&lt;br /&gt;
* When an instructor updates the Edit Course page with a chosen language picked, it will translate all the static strings in the Expertiza application to that new language.&lt;br /&gt;
&lt;br /&gt;
====Adding Multi-Language Support====&lt;br /&gt;
&lt;br /&gt;
* For this project, we will be adding support for one language right now, Hindi. &lt;br /&gt;
* We will be using the [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works Rails Internationalization (I18n) API] to help us add multi language support.&lt;br /&gt;
* There will be two &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files in the &amp;lt;code&amp;gt;config/locales&amp;lt;/code&amp;gt; directory representing the different languages that can be used in Expertiza.&lt;br /&gt;
** One for English, which will be the default language used, and another for Hindi. &lt;br /&gt;
*** &amp;lt;code&amp;gt;en.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;hi_IN.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
** These &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files contain the translated strings for their respective language.&lt;br /&gt;
* We will be editing the &amp;lt;code&amp;gt;routes.rb&amp;lt;/code&amp;gt; file and all the view files so that it can read from the &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files to show other languages.&lt;br /&gt;
&lt;br /&gt;
===Example Output===&lt;br /&gt;
&lt;br /&gt;
====Original Page====&lt;br /&gt;
[[File:Edit Course default.PNG|center|frame|100px]]&lt;br /&gt;
&lt;br /&gt;
====Language Dropdown====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock en.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Translated Page====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock hi IN.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Links/References ==&lt;br /&gt;
&lt;br /&gt;
===Project Links===&lt;br /&gt;
&lt;br /&gt;
* Pull Request:&lt;br /&gt;
* Github: https://github.com/mukhtar23/expertiza&lt;br /&gt;
* Video:&lt;br /&gt;
&lt;br /&gt;
===Support Material===&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#abstracting-localized-code https://guides.rubyonrails.org/i18n.html#abstracting-localized-code]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119529</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119529"/>
		<updated>2018-11-12T22:01:32Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
===Team Members===&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Hasham Mukhtar (hmukhta@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Abhilasha Saini (asaini4@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Reddy Aravind Karnam Ganesh (rkarnam@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
&lt;br /&gt;
config/locales&lt;br /&gt;
&lt;br /&gt;
routes.rb&lt;br /&gt;
&lt;br /&gt;
all view files&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
Currently Expertiza only supports creating courses in the English language. Many Expertiza users are from other countries. We aim to allow instructors to create courses in other languages. This will be done by internationalizing static strings in Expertiza to another language (ex: Hindi or Chinese). Instructors will have the ability to change the language for a course in the Edit Course page through a dropdown. We will not be affecting any strings that are dynamically shown and are not changing any English strings in the actual code.&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;br /&gt;
&lt;br /&gt;
===Technical Design===&lt;br /&gt;
&lt;br /&gt;
====Allowing instructor to change language for a course====&lt;br /&gt;
&lt;br /&gt;
* We will add a &amp;lt;code&amp;gt;language&amp;lt;/code&amp;gt; column to the &amp;lt;code&amp;gt;Courses&amp;lt;/code&amp;gt; Table.&lt;br /&gt;
* Then we will add a dropdown of languages to the Edit Course page for an instructor to use.&lt;br /&gt;
* When an instructor updates the Edit Course page with a chosen language picked, it will translate all the static strings in the Expertiza application to that new language.&lt;br /&gt;
&lt;br /&gt;
====Adding Multi-Language Support====&lt;br /&gt;
&lt;br /&gt;
* For this project, we will be adding support for one language right now, Hindi. &lt;br /&gt;
* We will be using the [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works Rails Internationalization (I18n) API] to help us add multi language support.&lt;br /&gt;
* There will be two &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files in the &amp;lt;code&amp;gt;config/locales&amp;lt;/code&amp;gt; directory representing the different languages that can be used in Expertiza.&lt;br /&gt;
** One for English, which will be the default language used, and another for Hindi. &lt;br /&gt;
*** &amp;lt;code&amp;gt;en.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;hi_IN.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
** These &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files contain the translated strings for their respective language.&lt;br /&gt;
* We will be editing the &amp;lt;code&amp;gt;routes.rb&amp;lt;/code&amp;gt; file and all the view files so that it can read from the &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files to show other languages.&lt;br /&gt;
&lt;br /&gt;
===Example Output===&lt;br /&gt;
&lt;br /&gt;
====Original Page====&lt;br /&gt;
[[File:Edit Course default.PNG|center|frame|300px]]&lt;br /&gt;
&lt;br /&gt;
====Language Dropdown====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock en.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Translated Page====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock hi IN.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Links/References ==&lt;br /&gt;
&lt;br /&gt;
===Project Links===&lt;br /&gt;
&lt;br /&gt;
* Pull Request:&lt;br /&gt;
* Github: https://github.com/mukhtar23/expertiza&lt;br /&gt;
* Video:&lt;br /&gt;
&lt;br /&gt;
===Support Material===&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#abstracting-localized-code https://guides.rubyonrails.org/i18n.html#abstracting-localized-code]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119528</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119528"/>
		<updated>2018-11-12T21:59:34Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
===Team Members===&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Hasham Mukhtar (hmukhta@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Abhilasha Saini (asaini4@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Reddy Aravind Karnam Ganesh (rkarnam@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
&lt;br /&gt;
config/locales&lt;br /&gt;
&lt;br /&gt;
routes.rb&lt;br /&gt;
&lt;br /&gt;
all view files&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
Currently Expertiza only supports creating courses in the English language. Many Expertiza users are from other countries. We aim to allow instructors to create courses in other languages. This will be done by internationalizing static strings in Expertiza to another language (ex: Hindi or Chinese). Instructors will have the ability to change the language for a course in the Edit Course page through a dropdown. We will not be affecting any strings that are dynamically shown and are not changing any English strings in the actual code.&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;br /&gt;
&lt;br /&gt;
===Technical Design===&lt;br /&gt;
&lt;br /&gt;
====Allowing instructor to change language for a course====&lt;br /&gt;
&lt;br /&gt;
* We will add a &amp;lt;code&amp;gt;language&amp;lt;/code&amp;gt; column to the &amp;lt;code&amp;gt;Courses&amp;lt;/code&amp;gt; Table.&lt;br /&gt;
* Then we will add a dropdown of languages to the Edit Course page for an instructor to use.&lt;br /&gt;
* When an instructor updates the Edit Course page with a chosen language picked, it will translate all the static strings in the Expertiza application to that new language.&lt;br /&gt;
&lt;br /&gt;
====Adding Multi-Language Support====&lt;br /&gt;
&lt;br /&gt;
* For this project, we will be adding support for one language right now, Hindi. &lt;br /&gt;
* We will be using the [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works Rails Internationalization (I18n) API] to help us add multi language support.&lt;br /&gt;
* There will be two &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files in the &amp;lt;code&amp;gt;config/locales&amp;lt;/code&amp;gt; directory representing the different languages that can be used in Expertiza.&lt;br /&gt;
** One for English, which will be the default language used, and another for Hindi. &lt;br /&gt;
*** &amp;lt;code&amp;gt;en.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;hi_IN.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
** These &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files contain the translated strings for their respective language.&lt;br /&gt;
* We will be editing the &amp;lt;code&amp;gt;routes.rb&amp;lt;/code&amp;gt; file and all the view files so that it can read from the &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files to show other languages.&lt;br /&gt;
&lt;br /&gt;
===Example Output===&lt;br /&gt;
&lt;br /&gt;
====Original Page====&lt;br /&gt;
[[File:Edit Course default.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Language Dropdown====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock en.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Translated Page====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock hi IN.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Links/References ==&lt;br /&gt;
&lt;br /&gt;
===Project Links===&lt;br /&gt;
&lt;br /&gt;
* Pull Request:&lt;br /&gt;
* Github: https://github.com/mukhtar23/expertiza&lt;br /&gt;
* Video:&lt;br /&gt;
&lt;br /&gt;
===Support Material===&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#abstracting-localized-code https://guides.rubyonrails.org/i18n.html#abstracting-localized-code]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119527</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119527"/>
		<updated>2018-11-12T21:59:12Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
===Team Members===&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Hasham Mukhtar (hmukhta@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Abhilasha Saini (asaini4@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Reddy Aravind Karnam Ganesh (rkarnam@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
&lt;br /&gt;
config/locales&lt;br /&gt;
&lt;br /&gt;
routes.rb&lt;br /&gt;
&lt;br /&gt;
all view files&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
Currently Expertiza only supports creating courses in the English language. Many Expertiza users are from other countries. We aim to allow instructors to create courses in other languages. This will be done by internationalizing static strings in Expertiza to another language (ex: Hindi or Chinese). Instructors will have the ability to change the language for a course in the Edit Course page through a dropdown. We will not be affecting any strings that are dynamically shown and are not changing any English strings in the actual code.&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;br /&gt;
&lt;br /&gt;
===Technical Design===&lt;br /&gt;
&lt;br /&gt;
====Allowing instructor to change language for a course====&lt;br /&gt;
&lt;br /&gt;
* We will add a &amp;lt;code&amp;gt;language&amp;lt;/code&amp;gt; column to the &amp;lt;code&amp;gt;Courses&amp;lt;/code&amp;gt; Table.&lt;br /&gt;
* Then we will add a dropdown of languages to the Edit Course page for an instructor to use.&lt;br /&gt;
* When an instructor updates the Edit Course page with a chosen language picked, it will translate all the static strings in the Expertiza application to that new language.&lt;br /&gt;
&lt;br /&gt;
====Adding Multi-Language Support====&lt;br /&gt;
&lt;br /&gt;
* For this project, we will be adding support for one language right now, Hindi. &lt;br /&gt;
* We will be using the [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works Rails Internationalization (I18n) API] to help us add multi language support.&lt;br /&gt;
* There will be two &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files in the &amp;lt;code&amp;gt;config/locales&amp;lt;/code&amp;gt; directory representing the different languages that can be used in Expertiza.&lt;br /&gt;
** One for English, which will be the default language used, and another for Hindi. &lt;br /&gt;
*** &amp;lt;code&amp;gt;en.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;hi_IN.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
** These &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files contain the translated strings for their respective language.&lt;br /&gt;
* We will be editing the &amp;lt;code&amp;gt;routes.rb&amp;lt;/code&amp;gt; file and all the view files so that it can read from the &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files to show other languages.&lt;br /&gt;
&lt;br /&gt;
===Example Output===&lt;br /&gt;
&lt;br /&gt;
====Original Page====&lt;br /&gt;
[[File:Edit Course default.PNG|300px]]&lt;br /&gt;
&lt;br /&gt;
====Language Dropdown====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock en.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Translated Page====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock hi IN.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Links/References ==&lt;br /&gt;
&lt;br /&gt;
===Project Links===&lt;br /&gt;
&lt;br /&gt;
* Pull Request:&lt;br /&gt;
* Github: https://github.com/mukhtar23/expertiza&lt;br /&gt;
* Video:&lt;br /&gt;
&lt;br /&gt;
===Support Material===&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#abstracting-localized-code https://guides.rubyonrails.org/i18n.html#abstracting-localized-code]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119526</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119526"/>
		<updated>2018-11-12T21:58:27Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
===Team Members===&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Hasham Mukhtar (hmukhta@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Abhilasha Saini (asaini4@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Reddy Aravind Karnam Ganesh (rkarnam@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
&lt;br /&gt;
config/locales&lt;br /&gt;
&lt;br /&gt;
routes.rb&lt;br /&gt;
&lt;br /&gt;
all view files&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
Currently Expertiza only supports creating courses in the English language. Many Expertiza users are from other countries. We aim to allow instructors to create courses in other languages. This will be done by internationalizing static strings in Expertiza to another language (ex: Hindi or Chinese). Instructors will have the ability to change the language for a course in the Edit Course page through a dropdown. We will not be affecting any strings that are dynamically shown and are not changing any English strings in the actual code.&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;br /&gt;
&lt;br /&gt;
===Technical Design===&lt;br /&gt;
&lt;br /&gt;
====Allowing instructor to change language for a course====&lt;br /&gt;
&lt;br /&gt;
* We will add a &amp;lt;code&amp;gt;language&amp;lt;/code&amp;gt; column to the &amp;lt;code&amp;gt;Courses&amp;lt;/code&amp;gt; Table.&lt;br /&gt;
* Then we will add a dropdown of languages to the Edit Course page for an instructor to use.&lt;br /&gt;
* When an instructor updates the Edit Course page with a chosen language picked, it will translate all the static strings in the Expertiza application to that new language.&lt;br /&gt;
&lt;br /&gt;
====Adding Multi-Language Support====&lt;br /&gt;
&lt;br /&gt;
* For this project, we will be adding support for one language right now, Hindi. &lt;br /&gt;
* We will be using the [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works Rails Internationalization (I18n) API] to help us add multi language support.&lt;br /&gt;
* There will be two &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files in the &amp;lt;code&amp;gt;config/locales&amp;lt;/code&amp;gt; directory representing the different languages that can be used in Expertiza.&lt;br /&gt;
** One for English, which will be the default language used, and another for Hindi. &lt;br /&gt;
*** &amp;lt;code&amp;gt;en.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;hi_IN.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
** These &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files contain the translated strings for their respective language.&lt;br /&gt;
* We will be editing the &amp;lt;code&amp;gt;routes.rb&amp;lt;/code&amp;gt; file and all the view files so that it can read from the &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files to show other languages.&lt;br /&gt;
&lt;br /&gt;
===Example Output===&lt;br /&gt;
&lt;br /&gt;
====Original Page====&lt;br /&gt;
[[File:Edit Course default.PNG|300px|frame]]&lt;br /&gt;
&lt;br /&gt;
====Language Dropdown====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock en.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Translated Page====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock hi IN.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Links/References ==&lt;br /&gt;
&lt;br /&gt;
===Project Links===&lt;br /&gt;
&lt;br /&gt;
* Pull Request:&lt;br /&gt;
* Github: https://github.com/mukhtar23/expertiza&lt;br /&gt;
* Video:&lt;br /&gt;
&lt;br /&gt;
===Support Material===&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#abstracting-localized-code https://guides.rubyonrails.org/i18n.html#abstracting-localized-code]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119525</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119525"/>
		<updated>2018-11-12T21:56:21Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
===Team Members===&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Hasham Mukhtar (hmukhta@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Abhilasha Saini (asaini4@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Reddy Aravind Karnam Ganesh (rkarnam@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
&lt;br /&gt;
config/locales&lt;br /&gt;
&lt;br /&gt;
routes.rb&lt;br /&gt;
&lt;br /&gt;
all view files&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
Currently Expertiza only supports creating courses in the English language. Many Expertiza users are from other countries. We aim to allow instructors to create courses in other languages. This will be done by internationalizing static strings in Expertiza to another language (ex: Hindi or Chinese). Instructors will have the ability to change the language for a course in the Edit Course page through a dropdown. We will not be affecting any strings that are dynamically shown and are not changing any English strings in the actual code.&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;br /&gt;
&lt;br /&gt;
===Technical Design===&lt;br /&gt;
&lt;br /&gt;
====Allowing instructor to change language for a course====&lt;br /&gt;
&lt;br /&gt;
* We will add a &amp;lt;code&amp;gt;language&amp;lt;/code&amp;gt; column to the &amp;lt;code&amp;gt;Courses&amp;lt;/code&amp;gt; Table.&lt;br /&gt;
* Then we will add a dropdown of languages to the Edit Course page for an instructor to use.&lt;br /&gt;
* When an instructor updates the Edit Course page with a chosen language picked, it will translate all the static strings in the Expertiza application to that new language.&lt;br /&gt;
&lt;br /&gt;
====Adding Multi-Language Support====&lt;br /&gt;
&lt;br /&gt;
* For this project, we will be adding support for one language right now, Hindi. &lt;br /&gt;
* We will be using the [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works Rails Internationalization (I18n) API] to help us add multi language support.&lt;br /&gt;
* There will be two &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files in the &amp;lt;code&amp;gt;config/locales&amp;lt;/code&amp;gt; directory representing the different languages that can be used in Expertiza.&lt;br /&gt;
** One for English, which will be the default language used, and another for Hindi. &lt;br /&gt;
*** &amp;lt;code&amp;gt;en.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;hi_IN.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
** These &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files contain the translated strings for their respective language.&lt;br /&gt;
* We will be editing the &amp;lt;code&amp;gt;routes.rb&amp;lt;/code&amp;gt; file and all the view files so that it can read from the &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files to show other languages.&lt;br /&gt;
&lt;br /&gt;
===Example Output===&lt;br /&gt;
&lt;br /&gt;
====Original Page====&lt;br /&gt;
[[File:Edit Course default.PNG|300px|frame|center]]&lt;br /&gt;
&lt;br /&gt;
====Language Dropdown====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock en.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Translated Page====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock hi IN.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Links/References ==&lt;br /&gt;
&lt;br /&gt;
===Project Links===&lt;br /&gt;
&lt;br /&gt;
* Pull Request:&lt;br /&gt;
* Github: https://github.com/mukhtar23/expertiza&lt;br /&gt;
* Video:&lt;br /&gt;
&lt;br /&gt;
===Support Material===&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#abstracting-localized-code https://guides.rubyonrails.org/i18n.html#abstracting-localized-code]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119524</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119524"/>
		<updated>2018-11-12T21:55:53Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
===Team Members===&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Hasham Mukhtar (hmukhta@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Abhilasha Saini (asaini4@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Reddy Aravind Karnam Ganesh (rkarnam@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
&lt;br /&gt;
config/locales&lt;br /&gt;
&lt;br /&gt;
routes.rb&lt;br /&gt;
&lt;br /&gt;
all view files&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
Currently Expertiza only supports creating courses in the English language. Many Expertiza users are from other countries. We aim to allow instructors to create courses in other languages. This will be done by internationalizing static strings in Expertiza to another language (ex: Hindi or Chinese). Instructors will have the ability to change the language for a course in the Edit Course page through a dropdown. We will not be affecting any strings that are dynamically shown and are not changing any English strings in the actual code.&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;br /&gt;
&lt;br /&gt;
===Technical Design===&lt;br /&gt;
&lt;br /&gt;
====Allowing instructor to change language for a course====&lt;br /&gt;
&lt;br /&gt;
* We will add a &amp;lt;code&amp;gt;language&amp;lt;/code&amp;gt; column to the &amp;lt;code&amp;gt;Courses&amp;lt;/code&amp;gt; Table.&lt;br /&gt;
* Then we will add a dropdown of languages to the Edit Course page for an instructor to use.&lt;br /&gt;
* When an instructor updates the Edit Course page with a chosen language picked, it will translate all the static strings in the Expertiza application to that new language.&lt;br /&gt;
&lt;br /&gt;
====Adding Multi-Language Support====&lt;br /&gt;
&lt;br /&gt;
* For this project, we will be adding support for one language right now, Hindi. &lt;br /&gt;
* We will be using the [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works Rails Internationalization (I18n) API] to help us add multi language support.&lt;br /&gt;
* There will be two &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files in the &amp;lt;code&amp;gt;config/locales&amp;lt;/code&amp;gt; directory representing the different languages that can be used in Expertiza.&lt;br /&gt;
** One for English, which will be the default language used, and another for Hindi. &lt;br /&gt;
*** &amp;lt;code&amp;gt;en.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;hi_IN.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
** These &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files contain the translated strings for their respective language.&lt;br /&gt;
* We will be editing the &amp;lt;code&amp;gt;routes.rb&amp;lt;/code&amp;gt; file and all the view files so that it can read from the &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files to show other languages.&lt;br /&gt;
&lt;br /&gt;
===Example Output===&lt;br /&gt;
&lt;br /&gt;
====Original Page====&lt;br /&gt;
[[File:Edit Course default.PNG|500px|frame|center]]&lt;br /&gt;
&lt;br /&gt;
====Language Dropdown====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock en.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Translated Page====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock hi IN.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Links/References ==&lt;br /&gt;
&lt;br /&gt;
===Project Links===&lt;br /&gt;
&lt;br /&gt;
* Pull Request:&lt;br /&gt;
* Github: https://github.com/mukhtar23/expertiza&lt;br /&gt;
* Video:&lt;br /&gt;
&lt;br /&gt;
===Support Material===&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#abstracting-localized-code https://guides.rubyonrails.org/i18n.html#abstracting-localized-code]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119523</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119523"/>
		<updated>2018-11-12T21:53:48Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
===Team Members===&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Hasham Mukhtar (hmukhta@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Abhilasha Saini (asaini4@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Reddy Aravind Karnam Ganesh (rkarnam@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
&lt;br /&gt;
config/locales&lt;br /&gt;
&lt;br /&gt;
routes.rb&lt;br /&gt;
&lt;br /&gt;
all view files&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
Currently Expertiza only supports creating courses in the English language. Many Expertiza users are from other countries. We aim to allow instructors to create courses in other languages. This will be done by internationalizing static strings in Expertiza to another language (ex: Hindi or Chinese). Instructors will have the ability to change the language for a course in the Edit Course page through a dropdown. We will not be affecting any strings that are dynamically shown and are not changing any English strings in the actual code.&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;br /&gt;
&lt;br /&gt;
===Technical Design===&lt;br /&gt;
&lt;br /&gt;
====Allowing instructor to change language for a course====&lt;br /&gt;
&lt;br /&gt;
* We will add a &amp;lt;code&amp;gt;language&amp;lt;/code&amp;gt; column to the &amp;lt;code&amp;gt;Courses&amp;lt;/code&amp;gt; Table.&lt;br /&gt;
* Then we will add a dropdown of languages to the Edit Course page for an instructor to use.&lt;br /&gt;
* When an instructor updates the Edit Course page with a chosen language picked, it will translate all the static strings in the Expertiza application to that new language.&lt;br /&gt;
&lt;br /&gt;
====Adding Multi-Language Support====&lt;br /&gt;
&lt;br /&gt;
* For this project, we will be adding support for one language right now, Hindi. &lt;br /&gt;
* We will be using the [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works Rails Internationalization (I18n) API] to help us add multi language support.&lt;br /&gt;
* There will be two &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files in the &amp;lt;code&amp;gt;config/locales&amp;lt;/code&amp;gt; directory representing the different languages that can be used in Expertiza.&lt;br /&gt;
** One for English, which will be the default language used, and another for Hindi. &lt;br /&gt;
*** &amp;lt;code&amp;gt;en.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;hi_IN.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
** These &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files contain the translated strings for their respective language.&lt;br /&gt;
* We will be editing the &amp;lt;code&amp;gt;routes.rb&amp;lt;/code&amp;gt; file and all the view files so that it can read from the &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files to show other languages.&lt;br /&gt;
&lt;br /&gt;
===Example Output===&lt;br /&gt;
&lt;br /&gt;
====Original Page====&lt;br /&gt;
[[File:Edit Course default.PNG|200px]]&lt;br /&gt;
&lt;br /&gt;
====Language Dropdown====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock en.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Translated Page====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock hi IN.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Links/References ==&lt;br /&gt;
&lt;br /&gt;
===Project Links===&lt;br /&gt;
&lt;br /&gt;
* Pull Request:&lt;br /&gt;
* Github: https://github.com/mukhtar23/expertiza&lt;br /&gt;
* Video:&lt;br /&gt;
&lt;br /&gt;
===Support Material===&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#abstracting-localized-code https://guides.rubyonrails.org/i18n.html#abstracting-localized-code]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119522</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119522"/>
		<updated>2018-11-12T21:53:16Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
===Team Members===&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Hasham Mukhtar (hmukhta@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Abhilasha Saini (asaini4@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Reddy Aravind Karnam Ganesh (rkarnam@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
&lt;br /&gt;
config/locales&lt;br /&gt;
&lt;br /&gt;
routes.rb&lt;br /&gt;
&lt;br /&gt;
all view files&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
Currently Expertiza only supports creating courses in the English language. Many Expertiza users are from other countries. We aim to allow instructors to create courses in other languages. This will be done by internationalizing static strings in Expertiza to another language (ex: Hindi or Chinese). Instructors will have the ability to change the language for a course in the Edit Course page through a dropdown. We will not be affecting any strings that are dynamically shown and are not changing any English strings in the actual code.&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;br /&gt;
&lt;br /&gt;
===Technical Design===&lt;br /&gt;
&lt;br /&gt;
====Allowing instructor to change language for a course====&lt;br /&gt;
&lt;br /&gt;
* We will add a &amp;lt;code&amp;gt;language&amp;lt;/code&amp;gt; column to the &amp;lt;code&amp;gt;Courses&amp;lt;/code&amp;gt; Table.&lt;br /&gt;
* Then we will add a dropdown of languages to the Edit Course page for an instructor to use.&lt;br /&gt;
* When an instructor updates the Edit Course page with a chosen language picked, it will translate all the static strings in the Expertiza application to that new language.&lt;br /&gt;
&lt;br /&gt;
====Adding Multi-Language Support====&lt;br /&gt;
&lt;br /&gt;
* For this project, we will be adding support for one language right now, Hindi. &lt;br /&gt;
* We will be using the [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works Rails Internationalization (I18n) API] to help us add multi language support.&lt;br /&gt;
* There will be two &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files in the &amp;lt;code&amp;gt;config/locales&amp;lt;/code&amp;gt; directory representing the different languages that can be used in Expertiza.&lt;br /&gt;
** One for English, which will be the default language used, and another for Hindi. &lt;br /&gt;
*** &amp;lt;code&amp;gt;en.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;hi_IN.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
** These &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files contain the translated strings for their respective language.&lt;br /&gt;
* We will be editing the &amp;lt;code&amp;gt;routes.rb&amp;lt;/code&amp;gt; file and all the view files so that it can read from the &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files to show other languages.&lt;br /&gt;
&lt;br /&gt;
===Example Output===&lt;br /&gt;
&lt;br /&gt;
====Original Page====&lt;br /&gt;
[[File:Edit Course default.PNG|200px|left|alt text]]&lt;br /&gt;
&lt;br /&gt;
====Language Dropdown====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock en.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Translated Page====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock hi IN.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Links/References ==&lt;br /&gt;
&lt;br /&gt;
===Project Links===&lt;br /&gt;
&lt;br /&gt;
* Pull Request:&lt;br /&gt;
* Github: https://github.com/mukhtar23/expertiza&lt;br /&gt;
* Video:&lt;br /&gt;
&lt;br /&gt;
===Support Material===&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#abstracting-localized-code https://guides.rubyonrails.org/i18n.html#abstracting-localized-code]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119520</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119520"/>
		<updated>2018-11-12T21:52:17Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
===Team Members===&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Hasham Mukhtar (hmukhta@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Abhilasha Saini (asaini4@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Reddy Aravind Karnam Ganesh (rkarnam@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
&lt;br /&gt;
config/locales&lt;br /&gt;
&lt;br /&gt;
routes.rb&lt;br /&gt;
&lt;br /&gt;
all view files&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
Currently Expertiza only supports creating courses in the English language. Many Expertiza users are from other countries. We aim to allow instructors to create courses in other languages. This will be done by internationalizing static strings in Expertiza to another language (ex: Hindi or Chinese). Instructors will have the ability to change the language for a course in the Edit Course page through a dropdown. We will not be affecting any strings that are dynamically shown and are not changing any English strings in the actual code.&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;br /&gt;
&lt;br /&gt;
===Technical Design===&lt;br /&gt;
&lt;br /&gt;
====Allowing instructor to change language for a course====&lt;br /&gt;
&lt;br /&gt;
* We will add a &amp;lt;code&amp;gt;language&amp;lt;/code&amp;gt; column to the &amp;lt;code&amp;gt;Courses&amp;lt;/code&amp;gt; Table.&lt;br /&gt;
* Then we will add a dropdown of languages to the Edit Course page for an instructor to use.&lt;br /&gt;
* When an instructor updates the Edit Course page with a chosen language picked, it will translate all the static strings in the Expertiza application to that new language.&lt;br /&gt;
&lt;br /&gt;
====Adding Multi-Language Support====&lt;br /&gt;
&lt;br /&gt;
* For this project, we will be adding support for one language right now, Hindi. &lt;br /&gt;
* We will be using the [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works Rails Internationalization (I18n) API] to help us add multi language support.&lt;br /&gt;
* There will be two &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files in the &amp;lt;code&amp;gt;config/locales&amp;lt;/code&amp;gt; directory representing the different languages that can be used in Expertiza.&lt;br /&gt;
** One for English, which will be the default language used, and another for Hindi. &lt;br /&gt;
*** &amp;lt;code&amp;gt;en.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;hi_IN.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
** These &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files contain the translated strings for their respective language.&lt;br /&gt;
* We will be editing the &amp;lt;code&amp;gt;routes.rb&amp;lt;/code&amp;gt; file and all the view files so that it can read from the &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files to show other languages.&lt;br /&gt;
&lt;br /&gt;
===Example Output===&lt;br /&gt;
&lt;br /&gt;
====Original Page====&lt;br /&gt;
[[File:Edit Course default.PNG|200px|thumb|left|alt text]]&lt;br /&gt;
&lt;br /&gt;
====Language Dropdown====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock en.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Translated Page====&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock hi IN.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Links/References ==&lt;br /&gt;
&lt;br /&gt;
===Project Links===&lt;br /&gt;
&lt;br /&gt;
* Pull Request:&lt;br /&gt;
* Github: [https://github.com/mukhtar23/expertiza]&lt;br /&gt;
* Video:&lt;br /&gt;
&lt;br /&gt;
===Support Material===&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#abstracting-localized-code https://guides.rubyonrails.org/i18n.html#abstracting-localized-code]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119515</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119515"/>
		<updated>2018-11-12T21:43:48Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
===Team Members===&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Hasham Mukhtar (hmukhta@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Abhilasha Saini (asaini4@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Reddy Aravind Karnam Ganesh (rkarnam@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
&lt;br /&gt;
config/locales&lt;br /&gt;
&lt;br /&gt;
routes.rb&lt;br /&gt;
&lt;br /&gt;
all view files&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
Currently Expertiza only supports creating courses in the English language. Many Expertiza users are from other countries. We aim to allow instructors to create courses in other languages. This will be done by internationalizing static strings in Expertiza to another language (ex: Hindi or Chinese). Instructors will have the ability to change the language for a course in the Edit Course page through a dropdown. We will not be affecting any strings that are dynamically shown and are not changing any English strings in the actual code.&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;br /&gt;
&lt;br /&gt;
===Technical Design===&lt;br /&gt;
&lt;br /&gt;
====Allowing instructor to change language for a course====&lt;br /&gt;
&lt;br /&gt;
* We will add a &amp;lt;code&amp;gt;language&amp;lt;/code&amp;gt; column to the &amp;lt;code&amp;gt;Courses&amp;lt;/code&amp;gt; Table.&lt;br /&gt;
* Then we will add a dropdown of languages to the Edit Course page for an instructor to use.&lt;br /&gt;
* When an instructor updates the Edit Course page with a chosen language picked, it will translate all the static strings in the Expertiza application to that new language.&lt;br /&gt;
&lt;br /&gt;
====Adding Multi-Language Support====&lt;br /&gt;
&lt;br /&gt;
* For this project, we will be adding support for one language right now, Hindi. &lt;br /&gt;
* We will be using the [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works Rails Internationalization (I18n) API] to help us add multi language support.&lt;br /&gt;
* There will be two &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files in the &amp;lt;code&amp;gt;config/locales&amp;lt;/code&amp;gt; directory representing the different languages that can be used in Expertiza.&lt;br /&gt;
** One for English, which will be the default language used, and another for Hindi. &lt;br /&gt;
*** &amp;lt;code&amp;gt;en.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;hi_IN.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
** These &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files contain the translated strings for their respective language.&lt;br /&gt;
* We will be editing the &amp;lt;code&amp;gt;routes.rb&amp;lt;/code&amp;gt; file and all the view files so that it can read from the &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files to show other languages.&lt;br /&gt;
&lt;br /&gt;
===Original Output===&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course default.PNG]]&lt;br /&gt;
&lt;br /&gt;
===Example Output===&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock en.PNG]]&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock hi IN.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Links/References ==&lt;br /&gt;
&lt;br /&gt;
===Project Links===&lt;br /&gt;
&lt;br /&gt;
* Pull Request:&lt;br /&gt;
* Github:&lt;br /&gt;
* Video:&lt;br /&gt;
 &lt;br /&gt;
===Support Material===&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#abstracting-localized-code https://guides.rubyonrails.org/i18n.html#abstracting-localized-code]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Edit_Course_mock_hi_IN.PNG&amp;diff=119514</id>
		<title>File:Edit Course mock hi IN.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Edit_Course_mock_hi_IN.PNG&amp;diff=119514"/>
		<updated>2018-11-12T21:42:46Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: This is a mock-up of the Edit Course page when Hindi is selected.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a mock-up of the Edit Course page when Hindi is selected.&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119513</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119513"/>
		<updated>2018-11-12T21:40:48Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
===Team Members===&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Hasham Mukhtar (hmukhta@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Abhilasha Saini (asaini4@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Reddy Aravind Karnam Ganesh (rkarnam@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
&lt;br /&gt;
config/locales&lt;br /&gt;
&lt;br /&gt;
routes.rb&lt;br /&gt;
&lt;br /&gt;
all view files&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
Currently Expertiza only supports creating courses in the English language. Many Expertiza users are from other countries. We aim to allow instructors to create courses in other languages. This will be done by internationalizing static strings in Expertiza to another language (ex: Hindi or Chinese). Instructors will have the ability to change the language for a course in the Edit Course page through a dropdown. We will not be affecting any strings that are dynamically shown and are not changing any English strings in the actual code.&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;br /&gt;
&lt;br /&gt;
===Technical Design===&lt;br /&gt;
&lt;br /&gt;
====Allowing instructor to change language for a course====&lt;br /&gt;
&lt;br /&gt;
* We will add a &amp;lt;code&amp;gt;language&amp;lt;/code&amp;gt; column to the &amp;lt;code&amp;gt;Courses&amp;lt;/code&amp;gt; Table.&lt;br /&gt;
* Then we will add a dropdown of languages to the Edit Course page for an instructor to use.&lt;br /&gt;
* When an instructor updates the Edit Course page with a chosen language picked, it will translate all the static strings in the Expertiza application to that new language.&lt;br /&gt;
&lt;br /&gt;
====Adding Multi-Language Support====&lt;br /&gt;
&lt;br /&gt;
* For this project, we will be adding support for one language right now, Hindi. &lt;br /&gt;
* We will be using the [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works Rails Internationalization (I18n) API] to help us add multi language support.&lt;br /&gt;
* There will be two &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files in the &amp;lt;code&amp;gt;config/locales&amp;lt;/code&amp;gt; directory representing the different languages that can be used in Expertiza.&lt;br /&gt;
** One for English, which will be the default language used, and another for Hindi. &lt;br /&gt;
*** &amp;lt;code&amp;gt;en.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;hi_IN.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
** These &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files contain the translated strings for their respective language.&lt;br /&gt;
* We will be editing the &amp;lt;code&amp;gt;routes.rb&amp;lt;/code&amp;gt; file and all the view files so that it can read from the &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files to show other languages.&lt;br /&gt;
&lt;br /&gt;
===Original Output===&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course default.PNG]]&lt;br /&gt;
&lt;br /&gt;
===Example Output===&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course mock en.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Links/References ==&lt;br /&gt;
&lt;br /&gt;
===Project Links===&lt;br /&gt;
&lt;br /&gt;
* Pull Request:&lt;br /&gt;
* Github:&lt;br /&gt;
* Video:&lt;br /&gt;
 &lt;br /&gt;
===Support Material===&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#abstracting-localized-code https://guides.rubyonrails.org/i18n.html#abstracting-localized-code]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Edit_Course_mock_en.PNG&amp;diff=119512</id>
		<title>File:Edit Course mock en.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Edit_Course_mock_en.PNG&amp;diff=119512"/>
		<updated>2018-11-12T21:40:03Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: This is a mock-up of the new Edit Course page when English is selected.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a mock-up of the new Edit Course page when English is selected.&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119507</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119507"/>
		<updated>2018-11-12T21:36:12Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
===Team Members===&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Hasham Mukhtar (hmukhta@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Abhilasha Saini (asaini4@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Reddy Aravind Karnam Ganesh (rkarnam@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
===Relevant Files===&lt;br /&gt;
&lt;br /&gt;
config/locales&lt;br /&gt;
&lt;br /&gt;
routes.rb&lt;br /&gt;
&lt;br /&gt;
all view files&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
Currently Expertiza only supports creating courses in the English language. Many Expertiza users are from other countries. We aim to allow instructors to create courses in other languages. This will be done by internationalizing static strings in Expertiza to another language (ex: Hindi or Chinese). Instructors will have the ability to change the language for a course in the Edit Course page through a dropdown. We will not be affecting any strings that are dynamically shown and are not changing any English strings in the actual code.&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;br /&gt;
&lt;br /&gt;
===Technical Design===&lt;br /&gt;
&lt;br /&gt;
====Allowing instructor to change language for a course====&lt;br /&gt;
&lt;br /&gt;
* We will add a &amp;lt;code&amp;gt;language&amp;lt;/code&amp;gt; column to the &amp;lt;code&amp;gt;Courses&amp;lt;/code&amp;gt; Table.&lt;br /&gt;
* Then we will add a dropdown of languages to the Edit Course page for an instructor to use.&lt;br /&gt;
* When an instructor updates the Edit Course page with a chosen language picked, it will translate all the static strings in the Expertiza application to that new language.&lt;br /&gt;
&lt;br /&gt;
====Adding Multi-Language Support====&lt;br /&gt;
&lt;br /&gt;
* For this project, we will be adding support for one language right now, Hindi. &lt;br /&gt;
* We will be using the [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works Rails Internationalization (I18n) API] to help us add multi language support.&lt;br /&gt;
* There will be two &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files in the &amp;lt;code&amp;gt;config/locales&amp;lt;/code&amp;gt; directory representing the different languages that can be used in Expertiza.&lt;br /&gt;
** One for English, which will be the default language used, and another for Hindi. &lt;br /&gt;
*** &amp;lt;code&amp;gt;en.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;hi_IN.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
** These &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files contain the translated strings for their respective language.&lt;br /&gt;
* We will be editing the &amp;lt;code&amp;gt;routes.rb&amp;lt;/code&amp;gt; file and all the view files so that it can read from the &amp;lt;code&amp;gt;yaml&amp;lt;/code&amp;gt; files to show other languages.&lt;br /&gt;
&lt;br /&gt;
===Original Output===&lt;br /&gt;
&lt;br /&gt;
[[File:Edit Course default.PNG]]&lt;br /&gt;
&lt;br /&gt;
===Example Output===&lt;br /&gt;
&lt;br /&gt;
== Links/References ==&lt;br /&gt;
&lt;br /&gt;
===Project Links===&lt;br /&gt;
&lt;br /&gt;
* Pull Request:&lt;br /&gt;
* Github:&lt;br /&gt;
* Video:&lt;br /&gt;
 &lt;br /&gt;
===Support Material===&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#abstracting-localized-code https://guides.rubyonrails.org/i18n.html#abstracting-localized-code]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Edit_Course_default.PNG&amp;diff=119506</id>
		<title>File:Edit Course default.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Edit_Course_default.PNG&amp;diff=119506"/>
		<updated>2018-11-12T21:33:58Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: The original Edit Course page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The original Edit Course page&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119452</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119452"/>
		<updated>2018-11-12T20:30:35Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
'''Team Members'''&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Hasham Mukhtar (hmukhta@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Abhilasha Saini (asaini4@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Reddy Aravind Karnam Ganesh (rkarnam@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
'''Relevant Files'''&lt;br /&gt;
&lt;br /&gt;
config/locales&lt;br /&gt;
&lt;br /&gt;
routes.rb&lt;br /&gt;
&lt;br /&gt;
all view files&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
Currently Expertiza only supports creating courses in the English language. Many Expertiza users are from other countries. We aim to allow instructors to create courses in other languages.&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;br /&gt;
&lt;br /&gt;
== Links/References ==&lt;br /&gt;
&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works https://guides.rubyonrails.org/i18n.html#how-i18n-in-ruby-on-rails-works]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params https://guides.rubyonrails.org/i18n.html#setting-the-locale-from-url-params]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#abstracting-localized-code https://guides.rubyonrails.org/i18n.html#abstracting-localized-code]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings https://guides.rubyonrails.org/i18n.html#providing-translations-for-internationalized-strings]&lt;br /&gt;
* [https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations https://guides.rubyonrails.org/i18n.html#passing-variables-to-translations]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119449</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119449"/>
		<updated>2018-11-12T20:14:13Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
'''Team Members'''&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Hasham Mukhtar (hmukhta@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Abhilasha Saini (asaini4@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Reddy Aravind Karnam Ganesh (rkarnam@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
'''Relevant Files'''&lt;br /&gt;
&lt;br /&gt;
config/locales&lt;br /&gt;
&lt;br /&gt;
routes.rb&lt;br /&gt;
&lt;br /&gt;
and all view files&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
Currently Expertiza only supports creating courses in the English language. Many Expertiza users are from other countries. We aim to allow instructors to create courses in other languages.&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;br /&gt;
&lt;br /&gt;
== Links/References ==&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018&amp;diff=119418</id>
		<title>CSC/ECE 517 Fall 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018&amp;diff=119418"/>
		<updated>2018-11-11T22:13:06Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[CSC/ECE 517 Fall 2018- Project E1846. OSS Project Navy: Character Issues]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2018/OSS E1848 Write unit tests for assignment team.rb]]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1839_Review_Requirements_and_Thresholds CSC/ECE 517 Fall 2018 E1839 Review Requirements and Thresholds]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1848_Write_unit_tests_for_assignment_team CSC/ECE 517 Fall 2018 E1848 Write unit tests for assignment_team]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1835_Refactor_delayed_mailer_and_scheduled_task CSC/ECE 517 Fall 2018 E1835_Refactor_delayed_mailer_and_scheduled_task]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1829_OSS_project_Duke_Blue_Fix_import_glitches CSC/ECE 517 Fall 2018 E1829 OSS project Duke Blue: Fix import glitches]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb CSC/ECE 517 Fall 2018 E1853 Write unit tests for menu.rb]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1853_write_unit_tests_for_menu CSC/ECE517 Fall 2018 E1853 Write Unit Tests For menu.rb]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2018_-_Project_E1852_Write_unit_tests_for_participant.rb CSC/ECE 517 Fall 2018 E1852 Write unit tests for participant.rb]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1844_Issues_related_to_names CSC/ECE 517 Fall 2018 E1844 Issues related to names]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/User_talk:Rshakya CSC/ECE 517 Fall 2018/E1852 Unit Test for Participant Model]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1850_Write_unit_tests_for_review_response_map CSC/ECE 517 Fall 2018 Write unit tests for review-response_map.rb]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb CSC/ECE 517 Fall 2018/E1849 Write Unit Tests for vm_question_response.rb]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119417</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119417"/>
		<updated>2018-11-11T22:04:31Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
'''Team Members'''&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Hasham Mukhtar (hmukhta@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Abhilasha Saini (asaini4@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Reddy Aravind Karnam Ganesh (rkarnam@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
'''Relevant Files'''&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
Currently Expertiza only supports creating courses in the English language. Many Expertiza users are from other countries. We aim to allow professors to create courses in other languages.&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links/References ==&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119416</id>
		<title>CSC/ECE 517 Fall 2018/E1866 Expertiza Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1866_Expertiza_Internationalization&amp;diff=119416"/>
		<updated>2018-11-11T21:50:52Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: Created page with &amp;quot; == Introduction ==    == Project Description ==    == Project Design ==&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project Description ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project Design ==&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119283</id>
		<title>CSC/ECE 517 Fall 2018/E1849 Write Unit Tests for vm question response.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119283"/>
		<updated>2018-11-10T04:48:05Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: /* Links/Resources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== VMQuestionResponse in Brief ===&lt;br /&gt;
This class acquires reviews from a given questionnaire and assignment, and creates a heat map visualization of the review scores a reviewee received from other people (reviewers) for an assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Objective ==&lt;br /&gt;
&lt;br /&gt;
There are currently no test cases for vm_question_response.rb. We seek to create unit tests to attain at least 90% coverage by line.&lt;br /&gt;
&lt;br /&gt;
=== Team === &lt;br /&gt;
&lt;br /&gt;
Matt Leader (mfleader@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=== Files Involved === &lt;br /&gt;
&lt;br /&gt;
app/models/vm_question_response.rb&lt;br /&gt;
&lt;br /&gt;
spec/models/vm_question_response_spec.rb&lt;br /&gt;
&lt;br /&gt;
== Testing Plan ==&lt;br /&gt;
&lt;br /&gt;
=== Testing Strategy: Unit Test ===&lt;br /&gt;
Testing VMQuestionResponse hinges upon collaboration verification, so that we know VMQuestionResponse is getting the right messages from the right classes, so that it can appropriately create its data structures.&lt;br /&gt;
&lt;br /&gt;
We first went through each method of the VMQuestionResponse class and determined whether the method was a command, or query and whether the method was incoming, outgoing, or sent-to-self. For each method we will write tests for valid and invalid inputs as well as edge cases.&lt;br /&gt;
&lt;br /&gt;
Here is an outline of our implementation strategy:&lt;br /&gt;
&lt;br /&gt;
To describe VMQuestionResponse&lt;br /&gt;
 &lt;br /&gt;
1) Test initialize&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a review questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with any other questionnaire type&lt;br /&gt;
&lt;br /&gt;
2) Test add questions&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is given a list of questions&lt;br /&gt;
&lt;br /&gt;
3) Test  add_reviews &lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a review questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a author feedback questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a teammate review questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a metareview questionnaire&lt;br /&gt;
&lt;br /&gt;
4) Test display_team_members&lt;br /&gt;
&lt;br /&gt;
5) Test add_team_members&lt;br /&gt;
&lt;br /&gt;
6) Test listofteamparticipants&lt;br /&gt;
&lt;br /&gt;
7) Test max_score_for_questionnaire&lt;br /&gt;
&lt;br /&gt;
8) Test add_answer&lt;br /&gt;
&lt;br /&gt;
9) Test get_number_of_comments_greater_than_10_words&lt;br /&gt;
&lt;br /&gt;
== Testing Implementation ==&lt;br /&gt;
&lt;br /&gt;
*''initialize'' : This tests that the VmQuestionResponse is initialized with the appropriate round number.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*''add_reviews'' : This tests that the add_review adds reviews and reviewers to the VmQuestionResponse from a given review&lt;br /&gt;
:- stub simulates the &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*''display_team_members'' : This tests that the VmQuestionResponse can print out the appropriate team member names.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*''add_answers'' : This tests that the VmQuestionResponse adds all of the review scores from its reviews to VmQuestionResponseCells&lt;br /&gt;
in VmQuestionResponseRows.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*''get_number_of_comments_greater_than_10_words'' : This tests that VmQuestionResponse only finds comments that have at least 10 words.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
We have now attained 97.25% coverage.&lt;br /&gt;
&lt;br /&gt;
== Links/Resources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mfleader42/expertiza/blob/master/spec/models/vm_question_response_spec.rb spec/models/vm_question_response_spec.rb]&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/yDfhSqVOoOk Testing Video(YouTube)]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119282</id>
		<title>CSC/ECE 517 Fall 2018/E1849 Write Unit Tests for vm question response.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119282"/>
		<updated>2018-11-10T04:47:54Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: /* Links/Resources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== VMQuestionResponse in Brief ===&lt;br /&gt;
This class acquires reviews from a given questionnaire and assignment, and creates a heat map visualization of the review scores a reviewee received from other people (reviewers) for an assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Objective ==&lt;br /&gt;
&lt;br /&gt;
There are currently no test cases for vm_question_response.rb. We seek to create unit tests to attain at least 90% coverage by line.&lt;br /&gt;
&lt;br /&gt;
=== Team === &lt;br /&gt;
&lt;br /&gt;
Matt Leader (mfleader@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=== Files Involved === &lt;br /&gt;
&lt;br /&gt;
app/models/vm_question_response.rb&lt;br /&gt;
&lt;br /&gt;
spec/models/vm_question_response_spec.rb&lt;br /&gt;
&lt;br /&gt;
== Testing Plan ==&lt;br /&gt;
&lt;br /&gt;
=== Testing Strategy: Unit Test ===&lt;br /&gt;
Testing VMQuestionResponse hinges upon collaboration verification, so that we know VMQuestionResponse is getting the right messages from the right classes, so that it can appropriately create its data structures.&lt;br /&gt;
&lt;br /&gt;
We first went through each method of the VMQuestionResponse class and determined whether the method was a command, or query and whether the method was incoming, outgoing, or sent-to-self. For each method we will write tests for valid and invalid inputs as well as edge cases.&lt;br /&gt;
&lt;br /&gt;
Here is an outline of our implementation strategy:&lt;br /&gt;
&lt;br /&gt;
To describe VMQuestionResponse&lt;br /&gt;
 &lt;br /&gt;
1) Test initialize&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a review questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with any other questionnaire type&lt;br /&gt;
&lt;br /&gt;
2) Test add questions&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is given a list of questions&lt;br /&gt;
&lt;br /&gt;
3) Test  add_reviews &lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a review questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a author feedback questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a teammate review questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a metareview questionnaire&lt;br /&gt;
&lt;br /&gt;
4) Test display_team_members&lt;br /&gt;
&lt;br /&gt;
5) Test add_team_members&lt;br /&gt;
&lt;br /&gt;
6) Test listofteamparticipants&lt;br /&gt;
&lt;br /&gt;
7) Test max_score_for_questionnaire&lt;br /&gt;
&lt;br /&gt;
8) Test add_answer&lt;br /&gt;
&lt;br /&gt;
9) Test get_number_of_comments_greater_than_10_words&lt;br /&gt;
&lt;br /&gt;
== Testing Implementation ==&lt;br /&gt;
&lt;br /&gt;
*''initialize'' : This tests that the VmQuestionResponse is initialized with the appropriate round number.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*''add_reviews'' : This tests that the add_review adds reviews and reviewers to the VmQuestionResponse from a given review&lt;br /&gt;
:- stub simulates the &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*''display_team_members'' : This tests that the VmQuestionResponse can print out the appropriate team member names.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*''add_answers'' : This tests that the VmQuestionResponse adds all of the review scores from its reviews to VmQuestionResponseCells&lt;br /&gt;
in VmQuestionResponseRows.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*''get_number_of_comments_greater_than_10_words'' : This tests that VmQuestionResponse only finds comments that have at least 10 words.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
We have now attained 97.25% coverage.&lt;br /&gt;
&lt;br /&gt;
== Links/Resources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mfleader42/expertiza/blob/master/spec/models/vm_question_response_spec.rb spec/models/vm_question_response_spec.rb]&lt;br /&gt;
[https://youtu.be/yDfhSqVOoOk Testing Video(YouTube)]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119276</id>
		<title>CSC/ECE 517 Fall 2018/E1849 Write Unit Tests for vm question response.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=119276"/>
		<updated>2018-11-10T04:39:36Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: /* Results */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== VMQuestionResponse in Brief ===&lt;br /&gt;
This class acquires reviews from a given questionnaire and assignment, and creates a heat map visualization of the review scores a reviewee received from other people (reviewers) for an assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Objective ==&lt;br /&gt;
&lt;br /&gt;
There are currently no test cases for vm_question_response.rb. We seek to create unit tests to attain at least 90% coverage by line.&lt;br /&gt;
&lt;br /&gt;
=== Team === &lt;br /&gt;
&lt;br /&gt;
Matt Leader (mfleader@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=== Files Involved === &lt;br /&gt;
&lt;br /&gt;
app/models/vm_question_response.rb&lt;br /&gt;
&lt;br /&gt;
spec/models/vm_question_response_spec.rb&lt;br /&gt;
&lt;br /&gt;
== Testing Plan ==&lt;br /&gt;
&lt;br /&gt;
=== Testing Strategy: Unit Test ===&lt;br /&gt;
Testing VMQuestionResponse hinges upon collaboration verification, so that we know VMQuestionResponse is getting the right messages from the right classes, so that it can appropriately create its data structures.&lt;br /&gt;
&lt;br /&gt;
We first went through each method of the VMQuestionResponse class and determined whether the method was a command, or query and whether the method was incoming, outgoing, or sent-to-self. For each method we will write tests for valid and invalid inputs as well as edge cases.&lt;br /&gt;
&lt;br /&gt;
Here is an outline of our implementation strategy:&lt;br /&gt;
&lt;br /&gt;
To describe VMQuestionResponse&lt;br /&gt;
 &lt;br /&gt;
1) Test initialize&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a review questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with any other questionnaire type&lt;br /&gt;
&lt;br /&gt;
2) Test add questions&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is given a list of questions&lt;br /&gt;
&lt;br /&gt;
3) Test  add_reviews &lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a review questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a author feedback questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a teammate review questionnaire&lt;br /&gt;
&lt;br /&gt;
* in the context when VMQuestionResponse is initialized with a metareview questionnaire&lt;br /&gt;
&lt;br /&gt;
4) Test display_team_members&lt;br /&gt;
&lt;br /&gt;
5) Test add_team_members&lt;br /&gt;
&lt;br /&gt;
6) Test listofteamparticipants&lt;br /&gt;
&lt;br /&gt;
7) Test max_score_for_questionnaire&lt;br /&gt;
&lt;br /&gt;
8) Test add_answer&lt;br /&gt;
&lt;br /&gt;
9) Test get_number_of_comments_greater_than_10_words&lt;br /&gt;
&lt;br /&gt;
== Testing Implementation ==&lt;br /&gt;
&lt;br /&gt;
*''initialize'' : This tests that the VmQuestionResponse is initialized with the appropriate round number.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*''add_reviews'' : This tests that the add_review adds reviews and reviewers to the VmQuestionResponse from a given review&lt;br /&gt;
:- stub simulates the &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*''display_team_members'' : This tests that the VmQuestionResponse can print out the appropriate team member names.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*''add_answers'' : This tests that the VmQuestionResponse adds all of the review scores from its reviews to VmQuestionResponseCells&lt;br /&gt;
in VmQuestionResponseRows.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*''get_number_of_comments_greater_than_10_words'' : This tests that VmQuestionResponse only finds comments that have at least 10 words.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
We have now attained 97.25% coverage.&lt;br /&gt;
&lt;br /&gt;
== Links/Resources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mfleader42/expertiza/blob/master/spec/models/vm_question_response_spec.rb spec/models/vm_question_response_spec.rb]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=118694</id>
		<title>CSC/ECE 517 Fall 2018/E1849 Write Unit Tests for vm question response.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=118694"/>
		<updated>2018-11-05T23:54:27Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Problem Statement ==&lt;br /&gt;
&lt;br /&gt;
There are currently no test cases for vm_question_response.rb. We seek to create unit tests for this model with a coverage of at least 90%.&lt;br /&gt;
&lt;br /&gt;
'''Team'''&lt;br /&gt;
&lt;br /&gt;
Matt Leader (mfleader@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
'''Files Involved'''&lt;br /&gt;
&lt;br /&gt;
app/models/vm_question_response.rb&lt;br /&gt;
&lt;br /&gt;
spec/models/vm_question_response_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing Plan ==&lt;br /&gt;
&lt;br /&gt;
We first went through each method of the VMQuestionResponse class and determined whether the method was a command, or query and whether the method was incoming, outgoing, or sent-to-self. For each method we will write tests for valid and invalid inputs as well as edge cases.&lt;br /&gt;
&lt;br /&gt;
Here is an outline of our implementation strategy:&lt;br /&gt;
&lt;br /&gt;
 describe VMQuestionResponse do&lt;br /&gt;
 &lt;br /&gt;
  context 'when initialized with a valid assignment questionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
   context 'when given a team'&lt;br /&gt;
 &lt;br /&gt;
    it 'displays the members of the team'&lt;br /&gt;
 &lt;br /&gt;
   context 'when given a list of valid questions'&lt;br /&gt;
 &lt;br /&gt;
    it 'can calculate the max score for the questionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'has the round value of the given questionnaire'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with an AuthorFeedbackQuestionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds answers'&lt;br /&gt;
 &lt;br /&gt;
   it 'get the number of comments greater than 10 words'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with a TeammateReviewQuestionnair'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with a MetaReviewQuesionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
&lt;br /&gt;
== Testing Implementation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(ReviewResponseMap).to receive_messages(:get_assessments_for =&amp;gt; [review], :find =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, team, false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests that the add_reviews method works when VMQuestionResponse has been initialized with @questionnaire_type = &amp;quot;ReviewQuestionnaire&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    context 'when given a team' do&lt;br /&gt;
 &lt;br /&gt;
      it 'displays the members of the team' do&lt;br /&gt;
 &lt;br /&gt;
        team = double('team')&lt;br /&gt;
 &lt;br /&gt;
        ppnt2 = double('ppnt2')&lt;br /&gt;
 &lt;br /&gt;
        allow(ppnt2).to receive_messages :fullname =&amp;gt; 'R'&lt;br /&gt;
 &lt;br /&gt;
        team_member_names = [ppnt0, ppnt1, ppnt2]&lt;br /&gt;
 &lt;br /&gt;
        allow(team).to receive_messages(:participants =&amp;gt; team_member_names)&lt;br /&gt;
 &lt;br /&gt;
        out = 'Team members:'&lt;br /&gt;
 &lt;br /&gt;
        vm_rsp.add_team_members(team)&lt;br /&gt;
 &lt;br /&gt;
        team.participants.each do |participant|&lt;br /&gt;
 &lt;br /&gt;
          out = out + &amp;quot; (&amp;quot; + participant.fullname + &amp;quot;) &amp;quot;&lt;br /&gt;
 &lt;br /&gt;
        end&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.display_team_members).to eq out&lt;br /&gt;
 &lt;br /&gt;
      end&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests that when VMQuestionResponse is initialized with a team the team members can be displayed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    context 'when given a list of valid questions' do&lt;br /&gt;
 &lt;br /&gt;
      let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
      it 'can calculate the max score for the questionnaire' do&lt;br /&gt;
 &lt;br /&gt;
        vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.max_score).to eq 5&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.list_of_rows.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
        expect(vm_rsp.max_score_for_questionnaire()).to eq qs.size * rq.max_question_score&lt;br /&gt;
 &lt;br /&gt;
      end&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code tests VMQuestionResponse knows the max score for the questionnaire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    it 'has the round value of the given questionnaire' do&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.round).to eq 1&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This code checks that VMQuestionResponse knows the value of @round for the given questionnaire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an AuthorFeedbackQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    [mock setup omitted for brevity]&lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      # review = double('review1')&lt;br /&gt;
 &lt;br /&gt;
      # review.stub(:map_id =&amp;gt; 1, :response_id =&amp;gt; 1)&lt;br /&gt;
 &lt;br /&gt;
      # allow(review).to receive_messages(:map_id =&amp;gt; 1)&lt;br /&gt;
 &lt;br /&gt;
      # ppnt0 = double('ppnt0') &lt;br /&gt;
 &lt;br /&gt;
      # allow(ppnt0).to receive_messages(:feedback =&amp;gt; [review])&lt;br /&gt;
 &lt;br /&gt;
      # ppnt1 = double('ppnt1')&lt;br /&gt;
 &lt;br /&gt;
      # allow(ppnt1).to receive_messages(:fullname =&amp;gt; 'Python')&lt;br /&gt;
 &lt;br /&gt;
      # mapping = double&lt;br /&gt;
 &lt;br /&gt;
      # allow(mapping).to receive_messages(:first =&amp;gt; mapping, :reviewer_id =&amp;gt; 2)&lt;br /&gt;
 &lt;br /&gt;
      # allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      # allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      # vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      # vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      # expect(vm_rsp.list_of_reviews).to eq [ppnt1]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    it 'adds answers' do&lt;br /&gt;
 &lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [ans])&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
 &lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question2)&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
 &lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    it 'gets the number of comments greater than 10 words' do&lt;br /&gt;
 &lt;br /&gt;
      allow(FeedbackResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
      allow(Answer).to receive_messages(:where =&amp;gt; [ans])&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPromptDeployment).to receive_messages(:where =&amp;gt; [tag_dep])&lt;br /&gt;
 &lt;br /&gt;
      allow(Question).to receive_messages(:find =&amp;gt; question2)&lt;br /&gt;
 &lt;br /&gt;
      allow(TagPrompt).to receive_messages(:find =&amp;gt; true)&lt;br /&gt;
 &lt;br /&gt;
      allow(VmTagPromptAnswer).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseScoreCell).to receive_messages(:new =&amp;gt; '')&lt;br /&gt;
 &lt;br /&gt;
      &lt;br /&gt;
 &lt;br /&gt;
      row = double('row')&lt;br /&gt;
 &lt;br /&gt;
      allow(row).to receive_messages(:countofcomments =&amp;gt; 7, :question_id =&amp;gt; 2,&lt;br /&gt;
 &lt;br /&gt;
        :question_max_score =&amp;gt; 5, :score_row =&amp;gt; [3])&lt;br /&gt;
 &lt;br /&gt;
      allow(VmQuestionResponseRow).to receive_messages(:new =&amp;gt; row)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_rows.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.get_number_of_comments_greater_than_10_words&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_rows[0].countofcomments).to eq 7&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
The above tests cover the scenario in which VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;AuthorFeedbackQuestionnaire&amp;quot;. We check that VMQuestionResponse can add revews, add answers, and retrieve the number of comments greater than 10 words in length. Here the test for add_reviews is commented out because it is still being developed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an TeammateReviewQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    let(:tmrq) { create(:questionnaire, name: &amp;quot;TeammateReviewQuestionnaire&amp;quot;,&lt;br /&gt;
 &lt;br /&gt;
                        type: 'TeammateReviewQuestionnaire') }&lt;br /&gt;
 &lt;br /&gt;
    let(:vm_rsp) { VmQuestionResponse.new( tmrq, assignment, 1 ) }&lt;br /&gt;
 &lt;br /&gt;
    let(:question2) { create(:question, questionnaire: tmrq, weight: 2, id: 2, type: 'good') }&lt;br /&gt;
 &lt;br /&gt;
    let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(TeammateReviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
This code checks that we can add reviews when VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;TeammateReviewQuestionnaire&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  context 'is initialized with an MetareviewQuestionnaire' do&lt;br /&gt;
 &lt;br /&gt;
    let(:mrq) { create(:questionnaire, name: &amp;quot;MetareviewQuestionnaire&amp;quot;, type: 'MetareviewQuestionnaire') }&lt;br /&gt;
 &lt;br /&gt;
    let(:question2) { create(:question, questionnaire: mrq, weight: 2, id: 2, type: 'good') }&lt;br /&gt;
 &lt;br /&gt;
    let(:qs) { qs = Array.new(1) { question2 } }&lt;br /&gt;
 &lt;br /&gt;
    let(:vm_rsp) { VmQuestionResponse.new( mrq, assignment, 1 ) }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    it 'adds reviews' do&lt;br /&gt;
 &lt;br /&gt;
      allow(MetareviewResponseMap).to receive_messages(:where =&amp;gt; mapping)&lt;br /&gt;
 &lt;br /&gt;
      allow(Participant).to receive_messages(:find =&amp;gt; ppnt1)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_questions qs&lt;br /&gt;
 &lt;br /&gt;
      vm_rsp.add_reviews(ppnt0, '', false)&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviewers.size).to eq 1&lt;br /&gt;
 &lt;br /&gt;
      expect(vm_rsp.list_of_reviews).to eq [review]&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
This code checks that we can add reviews when VMQuestionResponse is initialized with @questionnaire_type = &amp;quot;MetaReviewQuestionnaire&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
We have now attained 91% coverage.&lt;br /&gt;
&lt;br /&gt;
== Links/Resources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mfleader42/expertiza/blob/master/spec/models/vm_question_response_spec.rb spec/models/vm_question_response_spec.rb]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=118692</id>
		<title>CSC/ECE 517 Fall 2018/E1849 Write Unit Tests for vm question response.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=118692"/>
		<updated>2018-11-05T23:31:00Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Problem Statement ==&lt;br /&gt;
&lt;br /&gt;
There are currently no test cases for vm_question_response.rb. We seek to create unit tests for this model with a coverage of at least 90%.&lt;br /&gt;
&lt;br /&gt;
'''Team'''&lt;br /&gt;
&lt;br /&gt;
Matt Leader (mfleader@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
'''Files Involved'''&lt;br /&gt;
&lt;br /&gt;
app/models/vm_question_response.rb&lt;br /&gt;
&lt;br /&gt;
spec/models/vm_question_response_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing Plan ==&lt;br /&gt;
&lt;br /&gt;
We first went through each method of the VMQuestionResponse class and determined whether the method was a command, or query and whether the method was incoming, outgoing, or sent-to-self. For each method we will write tests for valid and invalid inputs as well as edge cases.&lt;br /&gt;
&lt;br /&gt;
Here is an outline of our implementation strategy:&lt;br /&gt;
&lt;br /&gt;
 describe VMQuestionResponse do&lt;br /&gt;
 &lt;br /&gt;
  context 'when initialized with a valid assignment questionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
   context 'when given a team'&lt;br /&gt;
 &lt;br /&gt;
    it 'displays the members of the team'&lt;br /&gt;
 &lt;br /&gt;
   context 'when given a list of valid questions'&lt;br /&gt;
 &lt;br /&gt;
    it 'can calculate the max score for the questionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'has the round value of the given questionnaire'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with an AuthorFeedbackQuestionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds answers'&lt;br /&gt;
 &lt;br /&gt;
   it 'get the number of comments greater than 10 words'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with a TeammateReviewQuestionnair'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with a MetaReviewQuesionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
&lt;br /&gt;
== Testing Implementation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
We have now attained 91% coverage.&lt;br /&gt;
&lt;br /&gt;
== Links/Resources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mfleader42/expertiza/blob/master/spec/models/vm_question_response_spec.rb spec/models/vm_question_response_spec.rb]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=118685</id>
		<title>CSC/ECE 517 Fall 2018/E1849 Write Unit Tests for vm question response.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=118685"/>
		<updated>2018-11-05T20:31:24Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Problem Statement ==&lt;br /&gt;
&lt;br /&gt;
There are currently no test cases for vm_question_response.rb. We seek to create unit tests for this model with a coverage of at least 90%.&lt;br /&gt;
&lt;br /&gt;
'''Team'''&lt;br /&gt;
&lt;br /&gt;
Matt Leader (mfleader@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
'''Files Involved'''&lt;br /&gt;
&lt;br /&gt;
app/models/vm_question_response.rb&lt;br /&gt;
&lt;br /&gt;
spec/models/vm_question_response_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing Plan ==&lt;br /&gt;
&lt;br /&gt;
We first went through each method of the VMQuestionResponse class and determined whether the method was a command, or query and whether the method was incoming, outgoing, or sent-to-self. For each method we will write tests for valid and invalid inputs as well as edge cases.&lt;br /&gt;
&lt;br /&gt;
Here is an outline of our implementation strategy:&lt;br /&gt;
&lt;br /&gt;
 describe VMQuestionResponse do&lt;br /&gt;
 &lt;br /&gt;
  context 'when initialized with a valid assignment questionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
   context 'when given a team'&lt;br /&gt;
 &lt;br /&gt;
    it 'displays the members of the team'&lt;br /&gt;
 &lt;br /&gt;
   context 'when given a list of valid questions'&lt;br /&gt;
 &lt;br /&gt;
    it 'can calculate the max score for the questionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'has the round value of the given questionnaire'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with an AuthorFeedbackQuestionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds answers'&lt;br /&gt;
 &lt;br /&gt;
   it 'get the number of comments greater than 10 words'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with a TeammateReviewQuestionnair'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
 &lt;br /&gt;
  context 'is initialized with a MetaReviewQuesionnaire'&lt;br /&gt;
 &lt;br /&gt;
   it 'adds reviews'&lt;br /&gt;
&lt;br /&gt;
== Testing Implementation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links/Resources ==&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018&amp;diff=118683</id>
		<title>CSC/ECE 517 Fall 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018&amp;diff=118683"/>
		<updated>2018-11-05T18:30:23Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[CSC/ECE 517 Fall 2018- Project E1846. OSS Project Navy: Character Issues]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2018/OSS E1848 Write unit tests for assignment team.rb]]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1839_Review_Requirements_and_Thresholds CSC/ECE 517 Fall 2018 E1839 Review Requirements and Thresholds]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1848_Write_unit_tests_for_assignment_team CSC/ECE 517 Fall 2018 E1848 Write unit tests for assignment_team]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1835_Refactor_delayed_mailer_and_scheduled_task CSC/ECE 517 Fall 2018 E1835_Refactor_delayed_mailer_and_scheduled_task]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1829_OSS_project_Duke_Blue_Fix_import_glitches CSC/ECE 517 Fall 2018 E1829 OSS project Duke Blue: Fix import glitches]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb CSC/ECE 517 Fall 2018 E1853 Write unit tests for menu.rb]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1853_write_unit_tests_for_menu CSC/ECE517 Fall 2018 E1853 Write Unit Tests For menu.rb]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2018_-_Project_E1852_Write_unit_tests_for_participant.rb CSC/ECE 517 Fall 2018 E1852 Write unit tests for participant.rb]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1844_Issues_related_to_names CSC/ECE 517 Fall 2018 E1844 Issues related to names]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/User_talk:Rshakya CSC/ECE 517 Fall 2018/E1852 Unit Test for Participant Model]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1850_Write_unit_tests_for_review_response_map CSC/ECE 517 Fall 2018 Write unit tests for review-response_map.rb]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb CSC/ECE 517 Fall 2018/E1849 Write Unit Tests for vm_question_response.rb]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018&amp;diff=118682</id>
		<title>CSC/ECE 517 Fall 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018&amp;diff=118682"/>
		<updated>2018-11-05T18:29:50Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[CSC/ECE 517 Fall 2018- Project E1846. OSS Project Navy: Character Issues]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2018/OSS E1848 Write unit tests for assignment team.rb]]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1839_Review_Requirements_and_Thresholds CSC/ECE 517 Fall 2018 E1839 Review Requirements and Thresholds]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1848_Write_unit_tests_for_assignment_team CSC/ECE 517 Fall 2018 E1848 Write unit tests for assignment_team]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1835_Refactor_delayed_mailer_and_scheduled_task CSC/ECE 517 Fall 2018 E1835_Refactor_delayed_mailer_and_scheduled_task]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1829_OSS_project_Duke_Blue_Fix_import_glitches CSC/ECE 517 Fall 2018 E1829 OSS project Duke Blue: Fix import glitches]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb CSC/ECE 517 Fall 2018 E1853 Write unit tests for menu.rb]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1853_write_unit_tests_for_menu CSC/ECE517 Fall 2018 E1853 Write Unit Tests For menu.rb]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2018_-_Project_E1852_Write_unit_tests_for_participant.rb CSC/ECE 517 Fall 2018 E1852 Write unit tests for participant.rb]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1844_Issues_related_to_names CSC/ECE 517 Fall 2018 E1844 Issues related to names]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/User_talk:Rshakya CSC/ECE 517 Fall 2018/E1852 Unit Test for Participant Model]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1850_Write_unit_tests_for_review_response_map CSC/ECE 517 Fall 2018 Write unit tests for review-response_map.rb]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018&amp;diff=118681</id>
		<title>CSC/ECE 517 Fall 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018&amp;diff=118681"/>
		<updated>2018-11-05T18:25:18Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[CSC/ECE 517 Fall 2018- Project E1846. OSS Project Navy: Character Issues]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2018/OSS E1848 Write unit tests for assignment team.rb]]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1839_Review_Requirements_and_Thresholds CSC/ECE 517 Fall 2018 E1839 Review Requirements and Thresholds]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1848_Write_unit_tests_for_assignment_team CSC/ECE 517 Fall 2018 E1848 Write unit tests for assignment_team]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1835_Refactor_delayed_mailer_and_scheduled_task CSC/ECE 517 Fall 2018 E1835_Refactor_delayed_mailer_and_scheduled_task]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1829_OSS_project_Duke_Blue_Fix_import_glitches CSC/ECE 517 Fall 2018 E1829 OSS project Duke Blue: Fix import glitches]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2018/E1853_Write_unit_tests_for_menu.rb CSC/ECE 517 Fall 2018 E1853 Write unit tests for menu.rb]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1853_write_unit_tests_for_menu CSC/ECE517 Fall 2018 E1853 Write Unit Tests For menu.rb]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2018_-_Project_E1852_Write_unit_tests_for_participant.rb CSC/ECE 517 Fall 2018 E1852 Write unit tests for participant.rb]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1844_Issues_related_to_names CSC/ECE 517 Fall 2018 E1844 Issues related to names]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/User_talk:Rshakya CSC/ECE 517 Fall 2018/E1852 Unit Test for Participant Model]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/E1850_Write_unit_tests_for_review_response_map CSC/ECE 517 Fall 2018 Write unit tests for review-response_map.rb]&lt;br /&gt;
* [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb]&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=118680</id>
		<title>CSC/ECE 517 Fall 2018/E1849 Write Unit Tests for vm question response.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2018/E1849_Write_Unit_Tests_for_vm_question_response.rb&amp;diff=118680"/>
		<updated>2018-11-05T18:21:32Z</updated>

		<summary type="html">&lt;p&gt;Jtgill: Created page with &amp;quot;== Problem Statement ==  There are currently no test cases for vm_question_response.rb. We seek to create unit tests for this model with a coverage of at least 90%.  '''Team'''  ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Problem Statement ==&lt;br /&gt;
&lt;br /&gt;
There are currently no test cases for vm_question_response.rb. We seek to create unit tests for this model with a coverage of at least 90%.&lt;br /&gt;
&lt;br /&gt;
'''Team'''&lt;br /&gt;
&lt;br /&gt;
Matt Leader (mfleader@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Jonathan Gill (jtgill@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
'''Files Involved'''&lt;br /&gt;
&lt;br /&gt;
app/models/vm_question_response.rb&lt;br /&gt;
&lt;br /&gt;
spec/models/vm_question_response_spec.rb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing Plan ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing Implementation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links/Resources ==&lt;/div&gt;</summary>
		<author><name>Jtgill</name></author>
	</entry>
</feed>