diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -136,3 +136,17 @@
 file in openqa_fedora_tools repository.
 9. Open differential request via phabricator, set openqa_fedora as a project and repository.
 10. Mark your test in [phabricator page](https://phab.qadevel.cloud.fedoraproject.org/w/openqa/tests/) as done.
+
+### Language handling
+
+Tests can run in different languages. To set the language which will be used for a test, set the `LANGUAGE`
+variable for the test suite. The results of this will be:
+
+1. The value set will be typed into the language search box in anaconda.
+2. Only needles with the tags `ENV-LANGUAGE-ALL` and `ENV-LANGUAGE-(LANGUAGE)` will be used for the test (where `(LANGUAGE)` is the value set, forced to upper-case).
+3. As a consequence, the chosen language will be selected at the anaconda Welcome screen.
+
+It is very important, therefore, that needles have the correct tags. Any needle which is expected to match for
+tests run in *any* language must have the `ENV-LANGUAGE-ALL` tag. Other needles must have the appropriate tag(s)
+for the languages they are expected to match. The safest option if you are unsure is to set `ENV-LANGUAGE-ALL`.
+The only danger of this is that missing translations may not be caught.
diff --git a/main.pm b/main.pm
--- a/main.pm
+++ b/main.pm
@@ -31,6 +31,19 @@
     for my $n (@a) { $n->unregister(); }
 }
 
+# Un-register all needles *except* those with specified tags (arg is a
+# list of tags)
+sub unregister_except_tags {
+    NEEDLE: for my $needle ( needle::all() ) {
+        for my $tag (@_) {
+            # If the needle has any of the tags, we skip to the next needle
+            next NEEDLE if ($needle->has_tag($tag));
+        }
+        # We only get here for a needle if we didn't match any of the tags
+        $needle->unregister();
+    }
+}
+
 sub cleanup_needles() {
     if (!get_var('LIVE')) {
         ## Unregister live-only installer needles. The main issue is the
@@ -41,6 +54,12 @@
         ## they don't match on it too soon.
         unregister_needle_tags("ENV-INSTALLER-live");
     }
+
+    # Unregister non-language-appropriate needles. Needles which are expected
+    # to match all languages have ENV-LANGUAGE-ALL tag.
+    my $lang = uc(get_var('LANGUAGE')) || 'ENGLISH';
+    $lang = 'ENV-LANGUAGE-'.$lang;
+    unregister_except_tags($lang, 'ENV-LANGUAGE-ALL');
 }
 $needle::cleanuphandler = \&cleanup_needles;
 
diff --git a/needles/anaconda_error.json b/needles/anaconda_error.json
--- a/needles/anaconda_error.json
+++ b/needles/anaconda_error.json
@@ -18,7 +18,7 @@
   "tags": [
     "ENV-DISTRI-fedora",
     "ENV-FLAVOR-server",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "anaconda_error"
   ],
   "properties": []
diff --git a/needles/anaconda_install_destination_delete_all_btn.json b/needles/anaconda_install_destination_delete_all_btn.json
--- a/needles/anaconda_install_destination_delete_all_btn.json
+++ b/needles/anaconda_install_destination_delete_all_btn.json
@@ -11,7 +11,7 @@
   "tags": [
     "anaconda_install_destination_delete_all_btn",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ENGLISH",
     "ENV-FLAVOR-server"
   ]
 }
\ No newline at end of file
diff --git a/needles/anaconda_install_destination_encrypt_data.json b/needles/anaconda_install_destination_encrypt_data.json
--- a/needles/anaconda_install_destination_encrypt_data.json
+++ b/needles/anaconda_install_destination_encrypt_data.json
@@ -2,7 +2,7 @@
   "tags": [
     "anaconda_install_destination_encrypt_data",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ENGLISH",
     "ENV-OFW-1",
     "ENV-FLAVOR-server"
   ],
diff --git a/needles/anaconda_install_destination_encrypt_data_french.json b/needles/anaconda_install_destination_encrypt_data_french.json
new file mode 100644
--- /dev/null
+++ b/needles/anaconda_install_destination_encrypt_data_french.json
@@ -0,0 +1,18 @@
+{
+    "area": [
+        {
+            "height": 21,
+            "type": "match",
+            "width": 152,
+            "xpos": 19,
+            "ypos": 623
+        }
+    ],
+    "tags": [
+        "anaconda_install_destination_encrypt_data",
+        "ENV-DISTRI-fedora",
+        "ENV-LANGUAGE-FRENCH",
+        "ENV-OFW-1",
+        "ENV-FLAVOR-server"
+    ]
+}
\ No newline at end of file
diff --git a/needles/anaconda_install_destination_encrypt_data_french.png b/needles/anaconda_install_destination_encrypt_data_french.png
new file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/needles/anaconda_install_destination_pony.json b/needles/anaconda_install_destination_pony.json
--- a/needles/anaconda_install_destination_pony.json
+++ b/needles/anaconda_install_destination_pony.json
@@ -2,7 +2,7 @@
   "tags": [
     "anaconda_install_destination_pony",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-FLAVOR-server"
   ],
   "area": [
@@ -14,4 +14,4 @@
       "type": "match"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_install_destination_pony_selected.json b/needles/anaconda_install_destination_pony_selected.json
--- a/needles/anaconda_install_destination_pony_selected.json
+++ b/needles/anaconda_install_destination_pony_selected.json
@@ -2,7 +2,7 @@
   "tags": [
     "anaconda_install_destination_pony",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-FLAVOR-develop"
   ],
   "area": [
@@ -15,4 +15,4 @@
     }
   ],
   "properties": []
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_install_destination_reclaim_space_btn.json b/needles/anaconda_install_destination_reclaim_space_btn.json
--- a/needles/anaconda_install_destination_reclaim_space_btn.json
+++ b/needles/anaconda_install_destination_reclaim_space_btn.json
@@ -2,7 +2,7 @@
   "tags": [
     "anaconda_install_destination_reclaim_space_btn",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ENGLISH",
     "ENV-FLAVOR-server"
   ],
   "area": [
diff --git a/needles/anaconda_install_destination_reclaim_space_delete_btn.json b/needles/anaconda_install_destination_reclaim_space_delete_btn.json
--- a/needles/anaconda_install_destination_reclaim_space_delete_btn.json
+++ b/needles/anaconda_install_destination_reclaim_space_delete_btn.json
@@ -2,7 +2,7 @@
   "tags": [
     "anaconda_install_destination_reclaim_space_delete_btn",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ENGLISH",
     "ENV-OFW-1",
     "ENV-FLAVOR-server"
   ],
diff --git a/needles/anaconda_install_destination_reclaim_space_first_partition.json b/needles/anaconda_install_destination_reclaim_space_first_partition.json
--- a/needles/anaconda_install_destination_reclaim_space_first_partition.json
+++ b/needles/anaconda_install_destination_reclaim_space_first_partition.json
@@ -11,8 +11,8 @@
   "tags": [
     "anaconda_install_destination_reclaim_space_first_partition",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-OFW-1",
     "ENV-FLAVOR-server"
   ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_install_destination_reclaim_space_first_partition_ntfs.json b/needles/anaconda_install_destination_reclaim_space_first_partition_ntfs.json
--- a/needles/anaconda_install_destination_reclaim_space_first_partition_ntfs.json
+++ b/needles/anaconda_install_destination_reclaim_space_first_partition_ntfs.json
@@ -11,8 +11,8 @@
   "tags": [
     "anaconda_install_destination_reclaim_space_first_partition",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-FLAVOR-universal"
   ],
   "properties": []
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_install_destination_reclaim_space_second_partition.json b/needles/anaconda_install_destination_reclaim_space_second_partition.json
--- a/needles/anaconda_install_destination_reclaim_space_second_partition.json
+++ b/needles/anaconda_install_destination_reclaim_space_second_partition.json
@@ -11,8 +11,8 @@
   "tags": [
     "anaconda_install_destination_reclaim_space_second_partition",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-OFW-1",
     "ENV-FLAVOR-server"
   ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_install_destination_reclaim_space_shrink_btn.json b/needles/anaconda_install_destination_reclaim_space_shrink_btn.json
--- a/needles/anaconda_install_destination_reclaim_space_shrink_btn.json
+++ b/needles/anaconda_install_destination_reclaim_space_shrink_btn.json
@@ -2,7 +2,7 @@
   "tags": [
     "anaconda_install_destination_reclaim_space_shrink_btn",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ENGLISH",
     "ENV-FLAVOR-develop"
   ],
   "area": [
diff --git a/needles/anaconda_install_destination_reclaim_space_shrink_slider.json b/needles/anaconda_install_destination_reclaim_space_shrink_slider.json
--- a/needles/anaconda_install_destination_reclaim_space_shrink_slider.json
+++ b/needles/anaconda_install_destination_reclaim_space_shrink_slider.json
@@ -2,7 +2,7 @@
   "tags": [
     "ENV-DISTRI-fedora",
     "ENV-FLAVOR-develop",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "anaconda_install_destination_reclaim_space_shrink_slider"
   ],
   "area": [
@@ -15,4 +15,4 @@
     }
   ],
   "properties": []
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_install_destination_save_passphrase.json b/needles/anaconda_install_destination_save_passphrase.json
--- a/needles/anaconda_install_destination_save_passphrase.json
+++ b/needles/anaconda_install_destination_save_passphrase.json
@@ -11,8 +11,8 @@
   "tags": [
     "anaconda_install_destination_save_passphrase",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ENGLISH",
     "ENV-OFW-1",
     "ENV-FLAVOR-server"
   ]
 }
\ No newline at end of file
diff --git a/needles/anaconda_install_destination_save_passphrase_french.json b/needles/anaconda_install_destination_save_passphrase_french.json
new file mode 100644
--- /dev/null
+++ b/needles/anaconda_install_destination_save_passphrase_french.json
@@ -0,0 +1,18 @@
+{
+    "area": [
+        {
+            "height": 37,
+            "type": "match",
+            "width": 190,
+            "xpos": 599,
+            "ypos": 526
+        }
+    ],
+    "tags": [
+        "anaconda_install_destination_save_passphrase",
+        "ENV-DISTRI-fedora",
+        "ENV-LANGUAGE-FRENCH",
+        "ENV-OFW-1",
+        "ENV-FLAVOR-server"
+    ]
+}
diff --git a/needles/anaconda_install_destination_save_passphrase_french.png b/needles/anaconda_install_destination_save_passphrase_french.png
new file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/needles/anaconda_install_destination_select_disk_1.json b/needles/anaconda_install_destination_select_disk_1.json
--- a/needles/anaconda_install_destination_select_disk_1.json
+++ b/needles/anaconda_install_destination_select_disk_1.json
@@ -12,7 +12,7 @@
     "tags": [
         "anaconda_install_destination_select_disk_1",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ALL",
         "ENV-FLAVOR-server"
     ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_install_destination_select_disk_2.json b/needles/anaconda_install_destination_select_disk_2.json
--- a/needles/anaconda_install_destination_select_disk_2.json
+++ b/needles/anaconda_install_destination_select_disk_2.json
@@ -12,7 +12,7 @@
     "tags": [
         "anaconda_install_destination_select_disk_2",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ALL",
         "ENV-FLAVOR-server"
     ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_install_done.json b/needles/anaconda_install_done.json
--- a/needles/anaconda_install_done.json
+++ b/needles/anaconda_install_done.json
@@ -19,6 +19,6 @@
         "anaconda_install_done",
         "ENV-DESKTOP-default",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US"
+        "ENV-LANGUAGE-ENGLISH"
     ]
 }
diff --git a/needles/anaconda_install_done.json b/needles/anaconda_install_done_french.json
copy from needles/anaconda_install_done.json
copy to needles/anaconda_install_done_french.json
--- a/needles/anaconda_install_done.json
+++ b/needles/anaconda_install_done_french.json
@@ -3,8 +3,8 @@
         {
             "height": 20,
             "type": "match",
-            "width": 325,
-            "xpos": 694,
+            "width": 410,
+            "xpos": 609,
             "ypos": 634
         },
         {
@@ -19,6 +19,6 @@
         "anaconda_install_done",
         "ENV-DESKTOP-default",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US"
+        "ENV-LANGUAGE-FRENCH"
     ]
-}
+}
\ No newline at end of file
diff --git a/needles/anaconda_install_done_french.png b/needles/anaconda_install_done_french.png
new file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/needles/anaconda_install_root_password.json b/needles/anaconda_install_root_password.json
--- a/needles/anaconda_install_root_password.json
+++ b/needles/anaconda_install_root_password.json
@@ -3,15 +3,15 @@
         {
             "height": 63,
             "type": "match",
-            "width": 192,
-            "xpos": 266,
+            "width": 72,
+            "xpos": 186,
             "ypos": 154
         }
     ],
     "tags": [
         "anaconda_install_root_password",
         "ENV-DESKTOP-default",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US"
+        "ENV-LANGUAGE-ALL"
     ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_install_root_password_screen.json b/needles/anaconda_install_root_password_screen.json
--- a/needles/anaconda_install_root_password_screen.json
+++ b/needles/anaconda_install_root_password_screen.json
@@ -18,7 +18,7 @@
   "tags": [
     "anaconda_install_root_password_screen",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ENGLISH",
     "ENV-FLAVOR-server"
   ],
   "properties": []
diff --git a/needles/anaconda_install_root_password_screen_french.json b/needles/anaconda_install_root_password_screen_french.json
new file mode 100644
--- /dev/null
+++ b/needles/anaconda_install_root_password_screen_french.json
@@ -0,0 +1,18 @@
+{
+    "area": [
+        {
+            "height": 16,
+            "type": "match",
+            "width": 181,
+            "xpos": 207,
+            "ypos": 130
+        }
+    ],
+    "properties": [],
+    "tags": [
+        "anaconda_install_root_password_screen",
+        "ENV-DISTRI-fedora",
+        "ENV-LANGUAGE-FRENCH",
+        "ENV-FLAVOR-server"
+    ]
+}
diff --git a/needles/anaconda_install_root_password_screen_french.png b/needles/anaconda_install_root_password_screen_french.png
new file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/needles/anaconda_install_source_check_repo_added.json b/needles/anaconda_install_source_check_repo_added.json
--- a/needles/anaconda_install_source_check_repo_added.json
+++ b/needles/anaconda_install_source_check_repo_added.json
@@ -2,7 +2,7 @@
   "tags": [
     "anaconda_install_source_check_repo_added",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-OFW-1",
     "ENV-FLAVOR-server"
   ],
@@ -15,4 +15,4 @@
       "width": 304
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_install_source_check_repo_added_eurlatgr.json b/needles/anaconda_install_source_check_repo_added_eurlatgr.json
--- a/needles/anaconda_install_source_check_repo_added_eurlatgr.json
+++ b/needles/anaconda_install_source_check_repo_added_eurlatgr.json
@@ -2,7 +2,7 @@
   "tags": [
     "anaconda_install_source_check_repo_added",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-OFW-1",
     "ENV-FLAVOR-server"
   ],
@@ -15,4 +15,4 @@
       "width": 304
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_install_source_check_repo_added_inst_repo.json b/needles/anaconda_install_source_check_repo_added_inst_repo.json
--- a/needles/anaconda_install_source_check_repo_added_inst_repo.json
+++ b/needles/anaconda_install_source_check_repo_added_inst_repo.json
@@ -11,8 +11,8 @@
   "tags": [
     "anaconda_install_source_check_repo_added",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-OFW-1",
     "ENV-FLAVOR-server"
   ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_install_source_http_selected.json b/needles/anaconda_install_source_http_selected.json
--- a/needles/anaconda_install_source_http_selected.json
+++ b/needles/anaconda_install_source_http_selected.json
@@ -3,7 +3,7 @@
   "tags": [
     "anaconda_install_source_http_selected",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-FLAVOR-server"
   ],
   "area": [
@@ -22,4 +22,4 @@
       "ypos": 163
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_install_source_https_selected.json b/needles/anaconda_install_source_https_selected.json
--- a/needles/anaconda_install_source_https_selected.json
+++ b/needles/anaconda_install_source_https_selected.json
@@ -3,7 +3,7 @@
   "tags": [
     "anaconda_install_source_http_selected",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-FLAVOR-server"
   ],
   "area": [
@@ -15,4 +15,4 @@
       "ypos": 163
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_install_source_on_the_network.json b/needles/anaconda_install_source_on_the_network.json
--- a/needles/anaconda_install_source_on_the_network.json
+++ b/needles/anaconda_install_source_on_the_network.json
@@ -2,7 +2,7 @@
   "tags": [
     "anaconda_install_source_on_the_network",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ENGLISH",
     "ENV-OFW-1",
     "ENV-FLAVOR-server"
   ],
diff --git a/needles/anaconda_install_source_repo_select_mirrorlist.json b/needles/anaconda_install_source_repo_select_mirrorlist.json
--- a/needles/anaconda_install_source_repo_select_mirrorlist.json
+++ b/needles/anaconda_install_source_repo_select_mirrorlist.json
@@ -11,8 +11,8 @@
   "tags": [
     "anaconda_install_source_repo_select_mirrorlist",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ENGLISH",
     "ENV-OFW-1",
     "ENV-FLAVOR-server"
   ]
 }
\ No newline at end of file
diff --git a/needles/anaconda_install_user_creation.json b/needles/anaconda_install_user_creation.json
--- a/needles/anaconda_install_user_creation.json
+++ b/needles/anaconda_install_user_creation.json
@@ -3,15 +3,15 @@
         {
             "height": 61,
             "type": "match",
-            "width": 187,
-            "xpos": 691,
+            "width": 23,
+            "xpos": 626,
             "ypos": 157
         }
     ],
     "tags": [
         "ENV-DESKTOP-default",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ALL",
         "anaconda_install_user_creation"
     ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_install_user_creation_make_admin.json b/needles/anaconda_install_user_creation_make_admin.json
--- a/needles/anaconda_install_user_creation_make_admin.json
+++ b/needles/anaconda_install_user_creation_make_admin.json
@@ -11,7 +11,7 @@
     "tags": [
         "ENV-DESKTOP-default",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ENGLISH",
         "anaconda_install_user_creation_make_admin"
     ]
 }
\ No newline at end of file
diff --git a/needles/anaconda_install_user_creation_make_admin.json b/needles/anaconda_install_user_creation_make_admin_french.json
copy from needles/anaconda_install_user_creation_make_admin.json
copy to needles/anaconda_install_user_creation_make_admin_french.json
--- a/needles/anaconda_install_user_creation_make_admin.json
+++ b/needles/anaconda_install_user_creation_make_admin_french.json
@@ -3,15 +3,15 @@
         {
             "height": 21,
             "type": "match",
-            "width": 204,
-            "xpos": 356,
+            "width": 264,
+            "xpos": 351,
             "ypos": 217
         }
     ],
     "tags": [
         "ENV-DESKTOP-default",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-FRENCH",
         "anaconda_install_user_creation_make_admin"
     ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_install_user_creation_make_admin_french.png b/needles/anaconda_install_user_creation_make_admin_french.png
new file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/needles/anaconda_install_user_creation_screen.json b/needles/anaconda_install_user_creation_screen.json
--- a/needles/anaconda_install_user_creation_screen.json
+++ b/needles/anaconda_install_user_creation_screen.json
@@ -3,7 +3,7 @@
   "tags": [
     "anaconda_install_user_creation_screen",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ENGLISH",
     "ENV-FLAVOR-server"
   ],
   "area": [
diff --git a/needles/anaconda_install_user_creation_screen_french.json b/needles/anaconda_install_user_creation_screen_french.json
new file mode 100644
--- /dev/null
+++ b/needles/anaconda_install_user_creation_screen_french.json
@@ -0,0 +1,25 @@
+{
+    "area": [
+        {
+            "height": 17,
+            "type": "match",
+            "width": 107,
+            "xpos": 227,
+            "ypos": 156
+        },
+        {
+            "height": 17,
+            "type": "match",
+            "width": 84,
+            "xpos": 250,
+            "ypos": 289
+        }
+    ],
+    "properties": [],
+    "tags": [
+        "anaconda_install_user_creation_screen",
+        "ENV-DISTRI-fedora",
+        "ENV-LANGUAGE-FRENCH",
+        "ENV-FLAVOR-server"
+    ]
+}
\ No newline at end of file
diff --git a/needles/anaconda_install_user_creation_screen_french.png b/needles/anaconda_install_user_creation_screen_french.png
new file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/needles/anaconda_main_hub_begin_installation.json b/needles/anaconda_main_hub_begin_installation.json
--- a/needles/anaconda_main_hub_begin_installation.json
+++ b/needles/anaconda_main_hub_begin_installation.json
@@ -12,6 +12,6 @@
         "anaconda_main_hub_begin_installation",
         "ENV-DESKTOP-default",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US"
+        "ENV-LANGUAGE-ENGLISH"
     ]
 }
\ No newline at end of file
diff --git a/needles/anaconda_main_hub_begin_installation.json b/needles/anaconda_main_hub_begin_installation_french.json
copy from needles/anaconda_main_hub_begin_installation.json
copy to needles/anaconda_main_hub_begin_installation_french.json
--- a/needles/anaconda_main_hub_begin_installation.json
+++ b/needles/anaconda_main_hub_begin_installation_french.json
@@ -1,17 +1,17 @@
 {
     "area": [
         {
-            "height": 42,
+            "height": 17,
             "type": "match",
             "width": 152,
-            "xpos": 867,
-            "ypos": 694
+            "xpos": 847,
+            "ypos": 704
         }
     ],
     "tags": [
         "anaconda_main_hub_begin_installation",
         "ENV-DESKTOP-default",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US"
+        "ENV-LANGUAGE-FRENCH"
     ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_main_hub_begin_installation_french.png b/needles/anaconda_main_hub_begin_installation_french.png
new file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/needles/anaconda_main_hub_install_destination.json b/needles/anaconda_main_hub_install_destination.json
--- a/needles/anaconda_main_hub_install_destination.json
+++ b/needles/anaconda_main_hub_install_destination.json
@@ -12,6 +12,6 @@
         "anaconda_main_hub_install_destination",
         "ENV-DESKTOP-default",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US"
+        "ENV-LANGUAGE-ALL"
     ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_main_hub_install_destination_already_done.json b/needles/anaconda_main_hub_install_destination_already_done.json
--- a/needles/anaconda_main_hub_install_destination_already_done.json
+++ b/needles/anaconda_main_hub_install_destination_already_done.json
@@ -1,25 +1,18 @@
-{
-  "tags": [
-    "anaconda_main_hub_install_destination",
-    "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
-    "ENV-OFW-1",
-    "ENV-FLAVOR-server"
-  ],
-  "area": [
-    {
-      "xpos": 174,
-      "ypos": 458,
-      "width": 87,
-      "height": 79,
-      "type": "match"
-    },
-    {
-      "xpos": 267,
-      "ypos": 472,
-      "width": 247,
-      "height": 30,
-      "type": "match"
-    }
-  ]
-}
\ No newline at end of file
+{
+    "area": [
+        {
+            "height": 79,
+            "type": "match",
+            "width": 87,
+            "xpos": 174,
+            "ypos": 458
+        }
+    ],
+    "tags": [
+        "anaconda_main_hub_install_destination",
+        "ENV-DISTRI-fedora",
+        "ENV-LANGUAGE-ALL",
+        "ENV-OFW-1",
+        "ENV-FLAVOR-server"
+    ]
+}
diff --git a/needles/anaconda_main_hub_installation_source.json b/needles/anaconda_main_hub_installation_source.json
--- a/needles/anaconda_main_hub_installation_source.json
+++ b/needles/anaconda_main_hub_installation_source.json
@@ -2,7 +2,7 @@
   "tags": [
     "anaconda_main_hub_installation_source",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ENGLISH",
     "ENV-OFW-1",
     "ENV-FLAVOR-server"
   ],
diff --git a/needles/anaconda_main_hub_live.json b/needles/anaconda_main_hub_live.json
--- a/needles/anaconda_main_hub_live.json
+++ b/needles/anaconda_main_hub_live.json
@@ -2,7 +2,7 @@
   "tags": [
     "anaconda_main_hub",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-INSTALLER-live"
   ],
   "area": [
diff --git a/needles/anaconda_main_hub_nonlive.json b/needles/anaconda_main_hub_nonlive.json
--- a/needles/anaconda_main_hub_nonlive.json
+++ b/needles/anaconda_main_hub_nonlive.json
@@ -2,7 +2,7 @@
   "tags": [
     "anaconda_main_hub",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-FLAVOR-server"
   ],
   "area": [
diff --git a/needles/anaconda_main_hub_select_packages.json b/needles/anaconda_main_hub_select_packages.json
--- a/needles/anaconda_main_hub_select_packages.json
+++ b/needles/anaconda_main_hub_select_packages.json
@@ -1,18 +1,18 @@
-{
-  "area": [
-    {
-      "xpos": 690,
-      "ypos": 354,
-      "width": 195,
-      "height": 27,
-      "type": "match"
-    }
-  ],
-  "tags": [
-    "anaconda_main_hub_select_packages",
-    "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
-    "ENV-OFW-1",
-    "ENV-FLAVOR-server"
-  ]
+{
+    "area": [
+        {
+            "height": 58,
+            "type": "match",
+            "width": 23,
+            "xpos": 627,
+            "ypos": 356
+        }
+    ],
+    "tags": [
+        "anaconda_main_hub_select_packages",
+        "ENV-DISTRI-fedora",
+        "ENV-LANGUAGE-ALL",
+        "ENV-OFW-1",
+        "ENV-FLAVOR-server"
+    ]
 }
\ No newline at end of file
diff --git a/needles/anaconda_manual_partitioning.json b/needles/anaconda_manual_partitioning.json
--- a/needles/anaconda_manual_partitioning.json
+++ b/needles/anaconda_manual_partitioning.json
@@ -3,7 +3,7 @@
   "tags": [
     "anaconda_manual_partitioning",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ENGLISH",
     "ENV-FLAVOR-server"
   ],
   "area": [
diff --git a/needles/anaconda_minimal_highlighted.json b/needles/anaconda_minimal_highlighted.json
--- a/needles/anaconda_minimal_highlighted.json
+++ b/needles/anaconda_minimal_highlighted.json
@@ -12,7 +12,7 @@
     "tags": [
         "anaconda_minimal_highlighted",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ENGLISH",
         "ENV-FLAVOR-server"
     ]
 }
\ No newline at end of file
diff --git a/needles/anaconda_minimal_highlighted.json b/needles/anaconda_minimal_highlighted_french.json
copy from needles/anaconda_minimal_highlighted.json
copy to needles/anaconda_minimal_highlighted_french.json
--- a/needles/anaconda_minimal_highlighted.json
+++ b/needles/anaconda_minimal_highlighted_french.json
@@ -3,16 +3,16 @@
         {
             "height": 15,
             "type": "match",
-            "width": 95,
+            "width": 130,
             "xpos": 50,
             "ypos": 146
         }
     ],
     "properties": [],
     "tags": [
         "anaconda_minimal_highlighted",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-FRENCH",
         "ENV-FLAVOR-server"
     ]
 }
\ No newline at end of file
diff --git a/needles/anaconda_minimal_highlighted_french.png b/needles/anaconda_minimal_highlighted_french.png
new file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/needles/anaconda_minimal_selected.json b/needles/anaconda_minimal_selected.json
--- a/needles/anaconda_minimal_selected.json
+++ b/needles/anaconda_minimal_selected.json
@@ -12,7 +12,7 @@
     "tags": [
         "anaconda_minimal_selected",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ENGLISH",
         "ENV-FLAVOR-server"
     ]
 }
\ No newline at end of file
diff --git a/needles/anaconda_minimal_selected.json b/needles/anaconda_minimal_selected_french.json
copy from needles/anaconda_minimal_selected.json
copy to needles/anaconda_minimal_selected_french.json
--- a/needles/anaconda_minimal_selected.json
+++ b/needles/anaconda_minimal_selected_french.json
@@ -3,16 +3,16 @@
         {
             "height": 14,
             "type": "match",
-            "width": 114,
+            "width": 149,
             "xpos": 30,
             "ypos": 146
         }
     ],
     "properties": [],
     "tags": [
         "anaconda_minimal_selected",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-FRENCH",
         "ENV-FLAVOR-server"
     ]
 }
\ No newline at end of file
diff --git a/needles/anaconda_minimal_selected_french.png b/needles/anaconda_minimal_selected_french.png
new file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/needles/anaconda_part_accept_changes.json b/needles/anaconda_part_accept_changes.json
--- a/needles/anaconda_part_accept_changes.json
+++ b/needles/anaconda_part_accept_changes.json
@@ -3,7 +3,7 @@
   "tags": [
     "anaconda_part_accept_changes",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ENGLISH",
     "ENV-FLAVOR-server"
   ],
   "area": [
diff --git a/needles/anaconda_part_add_mountpoint.json b/needles/anaconda_part_add_mountpoint.json
--- a/needles/anaconda_part_add_mountpoint.json
+++ b/needles/anaconda_part_add_mountpoint.json
@@ -12,7 +12,7 @@
   "tags": [
     "anaconda_part_add_mountpoint",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ENGLISH",
     "ENV-FLAVOR-server"
   ]
 }
\ No newline at end of file
diff --git a/needles/anaconda_part_automatic.json b/needles/anaconda_part_automatic.json
--- a/needles/anaconda_part_automatic.json
+++ b/needles/anaconda_part_automatic.json
@@ -11,7 +11,7 @@
     "tags": [
     "anaconda_part_automatic",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ENGLISH",
     "ENV-FLAVOR-server"
     ]
 }
diff --git a/needles/anaconda_part_delete.json b/needles/anaconda_part_delete.json
--- a/needles/anaconda_part_delete.json
+++ b/needles/anaconda_part_delete.json
@@ -11,7 +11,7 @@
     "tags": [
         "anaconda_part_delete",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ALL",
         "ENV-FLAVOR-generic_boot"
     ]
 }
diff --git a/needles/anaconda_part_desired_capacity.json b/needles/anaconda_part_desired_capacity.json
--- a/needles/anaconda_part_desired_capacity.json
+++ b/needles/anaconda_part_desired_capacity.json
@@ -11,8 +11,8 @@
   "tags": [
     "anaconda_part_desired_capacity",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ENGLISH",
     "ENV-FLAVOR-server"
   ],
   "properties": []
 }
\ No newline at end of file
diff --git a/needles/anaconda_part_device_type.json b/needles/anaconda_part_device_type.json
--- a/needles/anaconda_part_device_type.json
+++ b/needles/anaconda_part_device_type.json
@@ -3,7 +3,7 @@
   "tags": [
     "anaconda_part_device_type",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ENGLISH",
     "ENV-FLAVOR-server"
   ],
   "area": [
diff --git a/needles/anaconda_part_device_type_raid.json b/needles/anaconda_part_device_type_raid.json
--- a/needles/anaconda_part_device_type_raid.json
+++ b/needles/anaconda_part_device_type_raid.json
@@ -12,7 +12,7 @@
   "tags": [
     "anaconda_part_device_type_raid",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-FLAVOR-server"
   ]
 }
diff --git a/needles/anaconda_part_fs_ext3.json b/needles/anaconda_part_fs_ext3.json
--- a/needles/anaconda_part_fs_ext3.json
+++ b/needles/anaconda_part_fs_ext3.json
@@ -11,7 +11,7 @@
     "tags": [
         "anaconda_part_fs_ext3",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ALL",
         "ENV-FLAVOR-server"
     ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_part_fs_ext4_preselected.json b/needles/anaconda_part_fs_ext4_preselected.json
--- a/needles/anaconda_part_fs_ext4_preselected.json
+++ b/needles/anaconda_part_fs_ext4_preselected.json
@@ -11,7 +11,7 @@
     "tags": [
         "anaconda_part_fs",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ALL",
         "ENV-FLAVOR-server"
     ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_part_fs_xfs_preselected.json b/needles/anaconda_part_fs_xfs_preselected.json
--- a/needles/anaconda_part_fs_xfs_preselected.json
+++ b/needles/anaconda_part_fs_xfs_preselected.json
@@ -11,7 +11,7 @@
     "tags": [
         "anaconda_part_fs",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ALL",
         "ENV-FLAVOR-server"
     ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_part_list_box_boot.json b/needles/anaconda_part_list_box_boot.json
--- a/needles/anaconda_part_list_box_boot.json
+++ b/needles/anaconda_part_list_box_boot.json
@@ -2,7 +2,7 @@
   "tags": [
     "anaconda_part_list_box_boot",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-FLAVOR-server"
   ],
   "area": [
@@ -15,4 +15,4 @@
     }
   ],
   "properties": []
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_part_list_box_button.json b/needles/anaconda_part_list_box_button.json
--- a/needles/anaconda_part_list_box_button.json
+++ b/needles/anaconda_part_list_box_button.json
@@ -3,7 +3,7 @@
   "tags": [
     "anaconda_part_list_box_button",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-FLAVOR-server"
   ],
   "area": [
@@ -15,4 +15,4 @@
       "type": "match"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_part_list_box_root.json b/needles/anaconda_part_list_box_root.json
--- a/needles/anaconda_part_list_box_root.json
+++ b/needles/anaconda_part_list_box_root.json
@@ -3,7 +3,7 @@
   "tags": [
     "anaconda_part_list_box_root",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-FLAVOR-server"
   ],
   "area": [
@@ -15,4 +15,4 @@
       "type": "match"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_part_list_box_swap.json b/needles/anaconda_part_list_box_swap.json
--- a/needles/anaconda_part_list_box_swap.json
+++ b/needles/anaconda_part_list_box_swap.json
@@ -12,7 +12,7 @@
     "tags": [
         "anaconda_part_list_box_swap",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ALL",
         "ENV-FLAVOR-server"
     ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_part_plus_button.json b/needles/anaconda_part_plus_button.json
--- a/needles/anaconda_part_plus_button.json
+++ b/needles/anaconda_part_plus_button.json
@@ -12,7 +12,7 @@
     "tags": [
         "anaconda_part_plus_button",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ALL",
         "ENV-FLAVOR-server"
     ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_part_scheme.json b/needles/anaconda_part_scheme.json
--- a/needles/anaconda_part_scheme.json
+++ b/needles/anaconda_part_scheme.json
@@ -11,7 +11,7 @@
     "tags": [
         "anaconda_part_scheme",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ALL",
         "ENV-FLAVOR-server"
     ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_part_scheme_btrfs.json b/needles/anaconda_part_scheme_btrfs.json
--- a/needles/anaconda_part_scheme_btrfs.json
+++ b/needles/anaconda_part_scheme_btrfs.json
@@ -11,7 +11,7 @@
     "tags": [
     "anaconda_part_scheme_btrfs",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-FLAVOR-server"
     ]
 }
diff --git a/needles/anaconda_part_scheme_lvm.json b/needles/anaconda_part_scheme_lvm.json
--- a/needles/anaconda_part_scheme_lvm.json
+++ b/needles/anaconda_part_scheme_lvm.json
@@ -11,7 +11,7 @@
     "tags": [
         "anaconda_part_scheme_lvm",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ALL",
         "ENV-FLAVOR-server"
     ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_part_scheme_lvmthin.json b/needles/anaconda_part_scheme_lvmthin.json
--- a/needles/anaconda_part_scheme_lvmthin.json
+++ b/needles/anaconda_part_scheme_lvmthin.json
@@ -11,7 +11,7 @@
     "tags": [
         "anaconda_part_scheme_lvmthin",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ENGLISH",
         "ENV-FLAVOR-server"
     ]
 }
\ No newline at end of file
diff --git a/needles/anaconda_part_scheme_standard.json b/needles/anaconda_part_scheme_standard.json
--- a/needles/anaconda_part_scheme_standard.json
+++ b/needles/anaconda_part_scheme_standard.json
@@ -11,7 +11,7 @@
     "tags": [
         "anaconda_part_scheme_standard",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ENGLISH",
         "ENV-FLAVOR-server"
     ]
 }
\ No newline at end of file
diff --git a/needles/anaconda_part_select_root.json b/needles/anaconda_part_select_root.json
--- a/needles/anaconda_part_select_root.json
+++ b/needles/anaconda_part_select_root.json
@@ -11,7 +11,7 @@
     "tags": [
         "anaconda_part_select_root",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ALL",
         "ENV-FLAVOR-server"
     ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_part_select_root_already_selected.json b/needles/anaconda_part_select_root_already_selected.json
--- a/needles/anaconda_part_select_root_already_selected.json
+++ b/needles/anaconda_part_select_root_already_selected.json
@@ -11,7 +11,7 @@
     "tags": [
         "anaconda_part_select_root",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ALL",
         "ENV-FLAVOR-server"
     ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_part_select_swap.json b/needles/anaconda_part_select_swap.json
--- a/needles/anaconda_part_select_swap.json
+++ b/needles/anaconda_part_select_swap.json
@@ -12,7 +12,7 @@
     "tags": [
         "anaconda_part_select_swap",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ALL",
         "ENV-FLAVOR-generic_boot"
     ]
 }
diff --git a/needles/anaconda_part_update_settings.json b/needles/anaconda_part_update_settings.json
--- a/needles/anaconda_part_update_settings.json
+++ b/needles/anaconda_part_update_settings.json
@@ -12,7 +12,7 @@
     "tags": [
         "anaconda_part_update_settings",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ENGLISH",
         "ENV-FLAVOR-server"
     ]
 }
\ No newline at end of file
diff --git a/needles/anaconda_rawhide_accept_fate.json b/needles/anaconda_rawhide_accept_fate.json
--- a/needles/anaconda_rawhide_accept_fate.json
+++ b/needles/anaconda_rawhide_accept_fate.json
@@ -2,7 +2,7 @@
   "tags": [
     "ENV-DISTRI-fedora",
     "ENV-FLAVOR-server",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ENGLISH",
     "anaconda_rawhide_accept_fate"
   ],
   "area": [
diff --git a/needles/anaconda_rawhide_accept_fate_french.json b/needles/anaconda_rawhide_accept_fate_french.json
new file mode 100644
--- /dev/null
+++ b/needles/anaconda_rawhide_accept_fate_french.json
@@ -0,0 +1,17 @@
+{
+    "area": [
+        {
+            "height": 38,
+            "type": "match",
+            "width": 162,
+            "xpos": 613,
+            "ypos": 473
+        }
+    ],
+    "tags": [
+        "ENV-DISTRI-fedora",
+        "ENV-FLAVOR-server",
+        "ENV-LANGUAGE-FRENCH",
+        "anaconda_rawhide_accept_fate"
+    ]
+}
diff --git a/needles/anaconda_rawhide_accept_fate_french.png b/needles/anaconda_rawhide_accept_fate_french.png
new file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/needles/anaconda_report_btn.json b/needles/anaconda_report_btn.json
--- a/needles/anaconda_report_btn.json
+++ b/needles/anaconda_report_btn.json
@@ -11,7 +11,7 @@
   "tags": [
     "ENV-DISTRI-fedora",
     "ENV-FLAVOR-server",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "anaconda_report_btn"
   ],
   "properties": []
diff --git a/needles/anaconda_select_install_lang.json b/needles/anaconda_select_install_lang.json
--- a/needles/anaconda_select_install_lang.json
+++ b/needles/anaconda_select_install_lang.json
@@ -11,7 +11,7 @@
     "tags": [
         "anaconda_select_install_lang",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ALL",
         "ENV-FLAVOR-server"
     ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_select_install_lang_continue.json b/needles/anaconda_select_install_lang_continue.json
--- a/needles/anaconda_select_install_lang_continue.json
+++ b/needles/anaconda_select_install_lang_continue.json
@@ -12,6 +12,6 @@
         "anaconda_select_install_lang_continue",
         "ENV-DESKTOP-default",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US"
+        "ENV-LANGUAGE-ENGLISH"
     ]
 }
\ No newline at end of file
diff --git a/needles/anaconda_select_install_lang_continue.json b/needles/anaconda_select_install_lang_continue_french.json
copy from needles/anaconda_select_install_lang_continue.json
copy to needles/anaconda_select_install_lang_continue_french.json
--- a/needles/anaconda_select_install_lang_continue.json
+++ b/needles/anaconda_select_install_lang_continue_french.json
@@ -12,6 +12,6 @@
         "anaconda_select_install_lang_continue",
         "ENV-DESKTOP-default",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US"
+        "ENV-LANGUAGE-FRENCH"
     ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_select_install_lang_continue_french.png b/needles/anaconda_select_install_lang_continue_french.png
new file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/needles/anaconda_select_install_lang_english_filtered.json b/needles/anaconda_select_install_lang_english_filtered.json
--- a/needles/anaconda_select_install_lang_english_filtered.json
+++ b/needles/anaconda_select_install_lang_english_filtered.json
@@ -16,9 +16,9 @@
     }
   ],
   "tags": [
-    "anaconda_select_install_lang_english_filtered",
+    "anaconda_select_install_lang_filtered",
     "ENV-DESKTOP-default",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US"
+    "ENV-LANGUAGE-ENGLISH"
   ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_select_install_lang_english_selected.json b/needles/anaconda_select_install_lang_english_selected.json
--- a/needles/anaconda_select_install_lang_english_selected.json
+++ b/needles/anaconda_select_install_lang_english_selected.json
@@ -9,10 +9,10 @@
         }
     ],
     "tags": [
-        "anaconda_select_install_lang_english_selected",
-        "anaconda_select_install_lang_english_filtered",
+        "anaconda_select_install_lang_selected",
+        "anaconda_select_install_lang_filtered",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ENGLISH",
         "ENV-OFW-1",
         "ENV-FLAVOR-server"
     ]
diff --git a/needles/anaconda_select_install_lang_english_filtered.json b/needles/anaconda_select_install_lang_french_filtered.json
copy from needles/anaconda_select_install_lang_english_filtered.json
copy to needles/anaconda_select_install_lang_french_filtered.json
--- a/needles/anaconda_select_install_lang_english_filtered.json
+++ b/needles/anaconda_select_install_lang_french_filtered.json
@@ -16,9 +16,9 @@
     }
   ],
   "tags": [
-    "anaconda_select_install_lang_english_filtered",
+    "anaconda_select_install_lang_filtered",
     "ENV-DESKTOP-default",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US"
+    "ENV-LANGUAGE-FRENCH"
   ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_select_install_lang_french_filtered.png b/needles/anaconda_select_install_lang_french_filtered.png
new file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/needles/anaconda_select_install_lang_english_selected.json b/needles/anaconda_select_install_lang_french_selected.json
copy from needles/anaconda_select_install_lang_english_selected.json
copy to needles/anaconda_select_install_lang_french_selected.json
--- a/needles/anaconda_select_install_lang_english_selected.json
+++ b/needles/anaconda_select_install_lang_french_selected.json
@@ -3,16 +3,16 @@
         {
             "height": 20,
             "type": "match",
-            "width": 169,
+            "width": 124,
             "xpos": 603,
             "ypos": 205
         }
     ],
     "tags": [
-        "anaconda_select_install_lang_english_selected",
-        "anaconda_select_install_lang_english_filtered",
+        "anaconda_select_install_lang_selected",
+        "anaconda_select_install_lang_filtered",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-FRENCH",
         "ENV-OFW-1",
         "ENV-FLAVOR-server"
     ]
diff --git a/needles/anaconda_select_install_lang_french_selected.png b/needles/anaconda_select_install_lang_french_selected.png
new file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/needles/anaconda_select_install_lang_input.json b/needles/anaconda_select_install_lang_input.json
--- a/needles/anaconda_select_install_lang_input.json
+++ b/needles/anaconda_select_install_lang_input.json
@@ -12,7 +12,7 @@
     "tags": [
         "anaconda_select_install_lang_input",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ALL",
         "ENV-FLAVOR-server"
     ]
-}
\ No newline at end of file
+}
diff --git a/needles/anaconda_spoke_done.json b/needles/anaconda_spoke_done.json
--- a/needles/anaconda_spoke_done.json
+++ b/needles/anaconda_spoke_done.json
@@ -12,6 +12,6 @@
         "anaconda_spoke_done",
         "ENV-DESKTOP-default",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US"
+        "ENV-LANGUAGE-ENGLISH"
     ]
 }
diff --git a/needles/anaconda_spoke_done.json b/needles/anaconda_spoke_done_french.json
copy from needles/anaconda_spoke_done.json
copy to needles/anaconda_spoke_done_french.json
--- a/needles/anaconda_spoke_done.json
+++ b/needles/anaconda_spoke_done_french.json
@@ -1,17 +1,17 @@
 {
     "area": [
         {
-            "height": 22,
+            "height": 23,
             "type": "match",
-            "width": 55,
-            "xpos": 11,
-            "ypos": 51
+            "width": 48,
+            "xpos": 22,
+            "ypos": 56
         }
     ],
     "tags": [
         "anaconda_spoke_done",
         "ENV-DESKTOP-default",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US"
+        "ENV-LANGUAGE-FRENCH"
     ]
-}
+}
\ No newline at end of file
diff --git a/needles/anaconda_spoke_done_french.png b/needles/anaconda_spoke_done_french.png
new file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/needles/anaconda_user_creation_password_input.json b/needles/anaconda_user_creation_password_input.json
--- a/needles/anaconda_user_creation_password_input.json
+++ b/needles/anaconda_user_creation_password_input.json
@@ -2,7 +2,7 @@
   "tags": [
     "anaconda_user_creation_password_input",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ENGLISH",
     "ENV-FLAVOR-server"
   ],
   "properties": [],
diff --git a/needles/anaconda_user_creation_password_input_french.json b/needles/anaconda_user_creation_password_input_french.json
new file mode 100644
--- /dev/null
+++ b/needles/anaconda_user_creation_password_input_french.json
@@ -0,0 +1,18 @@
+{
+    "area": [
+        {
+            "height": 25,
+            "type": "match",
+            "width": 268,
+            "xpos": 250,
+            "ypos": 285
+        }
+    ],
+    "properties": [],
+    "tags": [
+        "anaconda_user_creation_password_input",
+        "ENV-DISTRI-fedora",
+        "ENV-LANGUAGE-FRENCH",
+        "ENV-FLAVOR-server"
+    ]
+}
\ No newline at end of file
diff --git a/needles/anaconda_user_creation_password_input_french.png b/needles/anaconda_user_creation_password_input_french.png
new file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/needles/boot_enter_passphrase.json b/needles/boot_enter_passphrase.json
--- a/needles/boot_enter_passphrase.json
+++ b/needles/boot_enter_passphrase.json
@@ -2,7 +2,7 @@
   "tags": [
     "boot_enter_passphrase",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-OFW-1",
     "ENV-FLAVOR-server"
   ],
@@ -15,4 +15,4 @@
       "type": "match"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/needles/boot_enter_passphrase2.json b/needles/boot_enter_passphrase2.json
--- a/needles/boot_enter_passphrase2.json
+++ b/needles/boot_enter_passphrase2.json
@@ -2,7 +2,7 @@
   "tags": [
     "boot_enter_passphrase",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-OFW-1",
     "ENV-FLAVOR-server"
   ],
@@ -15,4 +15,4 @@
       "type": "match"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/needles/bootloader_bios_live.json b/needles/bootloader_bios_live.json
--- a/needles/bootloader_bios_live.json
+++ b/needles/bootloader_bios_live.json
@@ -11,7 +11,7 @@
   "tags": [
     "bootloader",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-FLAVOR-server"
   ]
 }
diff --git a/needles/bootloader_bios_offline.json b/needles/bootloader_bios_offline.json
--- a/needles/bootloader_bios_offline.json
+++ b/needles/bootloader_bios_offline.json
@@ -11,7 +11,7 @@
   "tags": [
     "bootloader",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-FLAVOR-server"
   ]
 }
diff --git a/needles/console_command_success.json b/needles/console_command_success.json
--- a/needles/console_command_success.json
+++ b/needles/console_command_success.json
@@ -2,7 +2,7 @@
   "tags": [
     "console_command_success",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-FLAVOR-server"
   ],
   "area": [
@@ -15,4 +15,4 @@
     }
   ],
   "properties": []
-}
\ No newline at end of file
+}
diff --git a/needles/console_command_success2.json b/needles/console_command_success2.json
--- a/needles/console_command_success2.json
+++ b/needles/console_command_success2.json
@@ -2,7 +2,7 @@
   "tags": [
     "console_command_success",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-FLAVOR-server"
   ],
   "area": [
@@ -15,4 +15,4 @@
     }
   ],
   "properties": []
-}
\ No newline at end of file
+}
diff --git a/needles/console_password_required.json b/needles/console_password_required.json
--- a/needles/console_password_required.json
+++ b/needles/console_password_required.json
@@ -11,7 +11,7 @@
   "tags": [
     "console_password_required",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-FLAVOR-server"
   ]
-}
\ No newline at end of file
+}
diff --git a/needles/console_password_required2.json b/needles/console_password_required2.json
--- a/needles/console_password_required2.json
+++ b/needles/console_password_required2.json
@@ -12,7 +12,7 @@
   "tags": [
     "console_password_required",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-FLAVOR-server"
   ]
-}
\ No newline at end of file
+}
diff --git a/needles/console_raid_used.json b/needles/console_raid_used.json
--- a/needles/console_raid_used.json
+++ b/needles/console_raid_used.json
@@ -12,7 +12,7 @@
   "tags": [
     "console_raid_used",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-FLAVOR-server"
   ]
-}
\ No newline at end of file
+}
diff --git a/needles/console_two_disks_mounted_lvm.json b/needles/console_two_disks_mounted_lvm.json
--- a/needles/console_two_disks_mounted_lvm.json
+++ b/needles/console_two_disks_mounted_lvm.json
@@ -18,8 +18,8 @@
   "tags": [
     "console_two_disks_mounted_lvm",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-FLAVOR-server"
   ],
   "properties": []
-}
\ No newline at end of file
+}
diff --git a/needles/gnome_desktop_clean.json b/needles/gnome_desktop_clean.json
--- a/needles/gnome_desktop_clean.json
+++ b/needles/gnome_desktop_clean.json
@@ -2,7 +2,7 @@
   "tags": [
     "ENV-DESKTOP-gnome",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ENGLISH",
     "graphical_desktop_clean"
   ],
   "area": [
diff --git a/needles/graphical_login_gdm.json b/needles/graphical_login_gdm.json
--- a/needles/graphical_login_gdm.json
+++ b/needles/graphical_login_gdm.json
@@ -2,7 +2,7 @@
   "tags": [
     "graphical_login",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ENGLISH",
     "ENV-FLAVOR-develop"
   ],
   "properties": [],
diff --git a/needles/graphical_login_gdm_input.json b/needles/graphical_login_gdm_input.json
--- a/needles/graphical_login_gdm_input.json
+++ b/needles/graphical_login_gdm_input.json
@@ -12,7 +12,7 @@
     "tags": [
         "graphical_login_input",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ENGLISH",
         "ENV-FLAVOR-develop"
     ]
 }
\ No newline at end of file
diff --git a/needles/password_required.json b/needles/password_required.json
--- a/needles/password_required.json
+++ b/needles/password_required.json
@@ -2,7 +2,7 @@
   "tags": [
     "password_required",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ENGLISH",
     "ENV-FLAVOR-server"
   ],
   "area": [
diff --git a/needles/password_required2.json b/needles/password_required2.json
--- a/needles/password_required2.json
+++ b/needles/password_required2.json
@@ -11,8 +11,8 @@
   "tags": [
     "password_required",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ENGLISH",
     "ENV-FLAVOR-server"
   ],
   "properties": []
 }
\ No newline at end of file
diff --git a/needles/provided_disk_intact.json b/needles/provided_disk_intact.json
--- a/needles/provided_disk_intact.json
+++ b/needles/provided_disk_intact.json
@@ -2,7 +2,7 @@
   "tags": [
     "provided_disk_intact",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-FLAVOR-server"
   ],
   "area": [
@@ -14,4 +14,4 @@
       "type": "match"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/needles/provided_second_partition_intact.json b/needles/provided_second_partition_intact.json
--- a/needles/provided_second_partition_intact.json
+++ b/needles/provided_second_partition_intact.json
@@ -2,7 +2,7 @@
   "tags": [
     "provided_second_partition_intact",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-OFW-1",
     "ENV-FLAVOR-server"
   ],
@@ -15,4 +15,4 @@
       "type": "match"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/needles/root_logged_in.json b/needles/root_logged_in.json
--- a/needles/root_logged_in.json
+++ b/needles/root_logged_in.json
@@ -20,7 +20,7 @@
         "root_logged_in",
         "root_console",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ALL",
         "ENV-FLAVOR-server"
     ]
 }
diff --git a/needles/root_logged_in_biosfont.json b/needles/root_logged_in_biosfont.json
--- a/needles/root_logged_in_biosfont.json
+++ b/needles/root_logged_in_biosfont.json
@@ -19,7 +19,7 @@
         "root_logged_in",
         "root_console",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ALL",
         "ENV-FLAVOR-server"
     ]
 }
diff --git a/needles/text_console_login.json b/needles/text_console_login.json
--- a/needles/text_console_login.json
+++ b/needles/text_console_login.json
@@ -2,7 +2,7 @@
   "tags": [
     "text_console_login",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ALL",
     "ENV-FLAVOR-develop"
   ],
   "properties": [],
@@ -15,4 +15,4 @@
       "height": 30
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/needles/tmp_failed_proc.json b/needles/tmp_failed_proc.json
--- a/needles/tmp_failed_proc.json
+++ b/needles/tmp_failed_proc.json
@@ -2,7 +2,7 @@
   "tags": [
     "tmp_failed_proc",
     "ENV-DISTRI-fedora",
-    "ENV-INSTLANG-en_US",
+    "ENV-LANGUAGE-ENGLISH",
     "ENV-FLAVOR-develop"
   ],
   "properties": [],
diff --git a/needles/user_logged_in.json b/needles/user_logged_in.json
--- a/needles/user_logged_in.json
+++ b/needles/user_logged_in.json
@@ -19,7 +19,7 @@
         "user_logged_in",
         "user_console",
         "ENV-DISTRI-fedora",
-        "ENV-INSTLANG-en_US",
+        "ENV-LANGUAGE-ALL",
         "ENV-FLAVOR-server"
     ]
 }
diff --git a/needles/workstation_live_initial.json b/needles/workstation_live_initial.json
--- a/needles/workstation_live_initial.json
+++ b/needles/workstation_live_initial.json
@@ -3,7 +3,8 @@
     "live_initial_anaconda_launcher",
     "live_start_anaconda_icon",
     "ENV-DISTRI-fedora",
-    "ENV-DESKTOP-gnome"
+    "ENV-DESKTOP-gnome",
+    "ENV-LANGUAGE-ALL"
   ],
   "area": [
     {
diff --git a/templates b/templates
--- a/templates
+++ b/templates
@@ -277,6 +277,16 @@
                       test_suite => { name => "server_shrink_ntfs" },
                     },
                     {
+                      machine    => { name => "64bit" },
+                      product    => {
+                                      arch    => "x86_64",
+                                      distri  => "fedora",
+                                      flavor  => "universal",
+                                      version => "*",
+                                    },
+                      test_suite => { name => "european_language_install" },
+                    },
+                    {
                       machine    => { name => "32bit" },
                       product    => {
                                       arch    => "i386",
@@ -525,6 +535,16 @@
                                       version => "*",
                                     },
                       test_suite => { name => "server_updates_img_local" },
+                    },
+                    {
+                      machine    => { name => "32bit" },
+                      product    => {
+                                      arch    => "i386",
+                                      distri  => "fedora",
+                                      flavor  => "universal",
+                                      version => "*",
+                                    },
+                      test_suite => { name => "european_language_install" },
                     }
                   ],
   Machines     => [
@@ -919,5 +939,16 @@
                       ],
                       variables => "",
                     },
+                    {
+                      name => "european_language_install",
+                      prio => 24,
+                      settings => [
+                        { key => "LANGUAGE", value => "french" },
+                        { key => "USER_LOGIN", value => "qwerty" },
+                        { key => "ROOT_PASSWORD", value => "weakpassword" },
+                        { key => "ENCRYPT_PASSWORD", value => "weakpassword" },
+                      ],
+                      variables => "",
+                    },
                   ],
 }
diff --git a/tests/_boot_to_anaconda.pm b/tests/_boot_to_anaconda.pm
--- a/tests/_boot_to_anaconda.pm
+++ b/tests/_boot_to_anaconda.pm
@@ -43,13 +43,16 @@
         if (get_var('LIVE')) {
             assert_and_click "live_start_anaconda_icon", '', 300;
         }
+        my $language = get_var('LANGUAGE') || 'english';
         # wait for anaconda to appear
         assert_screen "anaconda_select_install_lang", 300;
         # Select install language
         assert_and_click "anaconda_select_install_lang_input";
-        type_string "english";
-        assert_and_click "anaconda_select_install_lang_english_filtered";
-        assert_screen "anaconda_select_install_lang_english_selected", 3;
+        type_string "${language}";
+        # Needle filtering in main.pm ensures we will only look for the
+        # appropriate language, here
+        assert_and_click "anaconda_select_install_lang_filtered";
+        assert_screen "anaconda_select_install_lang_selected", 3;
         assert_and_click "anaconda_select_install_lang_continue";
 
         if ( check_screen "anaconda_rawhide_accept_fate" ) {

