Bladeren bron

docs: language table added (#5375)

* docs: language table added

* Update 05_Configuration.md

* Update 05_Configuration.md

* french docs

* Unicode quote and a few fixes
(Same search&replace aslo applied to a few other files)

---------

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
maTh 2 jaren geleden
bovenliggende
commit
54c8de86c7

+ 1 - 1
Docker/README.md

@@ -396,7 +396,7 @@ image: freshrss/freshrss:arm
 
 
 If you then get this error message when running `docker compose up`:
 If you then get this error message when running `docker compose up`:
 
 
-> The requested image's platform (linux/arm/v7) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
+> The requested images platform (linux/arm/v7) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
 
 
 … you will also need to specify the platform in the `service` part:
 … you will also need to specify the platform in the `service` part:
 
 

+ 2 - 2
app/Models/BooleanSearch.php

@@ -33,8 +33,8 @@ class FreshRSS_BooleanSearch {
 			$input = $this->parseUserQueryIds($input);
 			$input = $this->parseUserQueryIds($input);
 		}
 		}
 
 
-		// Either parse everything as a series of BooleanSearch's combined by implicit AND
-		// or parse everything as a series of Search's combined by explicit OR
+		// Either parse everything as a series of BooleanSearchs combined by implicit AND
+		// or parse everything as a series of Searchs combined by explicit OR
 		$this->parseParentheses($input, $level) || $this->parseOrSegments($input);
 		$this->parseParentheses($input, $level) || $this->parseOrSegments($input);
 	}
 	}
 
 

+ 2 - 3
app/Services/ImportService.php

@@ -358,7 +358,7 @@ class FreshRSS_Import_Service {
 		}
 		}
 
 
 		if (isset($outline['@outlines'])) {
 		if (isset($outline['@outlines'])) {
-			// The outline has children, it's probably a category
+			// The outline has children, its probably a category
 			if (!empty($outline['text'])) {
 			if (!empty($outline['text'])) {
 				$category_name = $outline['text'];
 				$category_name = $outline['text'];
 			} elseif (!empty($outline['title'])) {
 			} elseif (!empty($outline['title'])) {
@@ -376,8 +376,7 @@ class FreshRSS_Import_Service {
 			$categories_elements[$category_name] = $outline;
 			$categories_elements[$category_name] = $outline;
 		}
 		}
 
 
-		// The xmlUrl means it's a feed URL: add the outline to the array if it
-		// exists.
+		// The xmlUrl means it’s a feed URL: add the outline to the array if it exists.
 		if (isset($outline['xmlUrl'])) {
 		if (isset($outline['xmlUrl'])) {
 			if (!isset($categories_to_feeds[$parent_category_name])) {
 			if (!isset($categories_to_feeds[$parent_category_name])) {
 				$categories_to_feeds[$parent_category_name] = [];
 				$categories_to_feeds[$parent_category_name] = [];

+ 1 - 1
docs/en/admins/05_Backup.md

@@ -2,7 +2,7 @@
 
 
 FreshRSS global settings are in `./data/config.php` and users' settings are in `./data/users/*/config.php`. You can also back up the whole `./data/` directory but exclude the things you do not want.
 FreshRSS global settings are in `./data/config.php` and users' settings are in `./data/users/*/config.php`. You can also back up the whole `./data/` directory but exclude the things you do not want.
 
 
-If you use extensions, then each directory in `./extensions` the folder `static` contains the user's extension settings.
+If you use extensions, then each directory in `./extensions` the folder `static` contains the users extension settings.
 
 
 ## Full-Installation Backup
 ## Full-Installation Backup
 
 

+ 2 - 3
docs/en/internationalization.md

@@ -1,6 +1,6 @@
 # Contributing to internationalization (i18n)
 # Contributing to internationalization (i18n)
 
 
-Thanks to our contributors, FreshRSS is translated into more than 15 languages. This section will explain the basics of internationalization in FreshRSS, from translating the application to your own language to making a specific change.
+Thanks to our contributors, FreshRSS is translated into [more than 20 languages](./users/05_Configuration.md#language). This section will explain the basics of internationalization in FreshRSS, from translating the application to your own language to making a specific change.
 
 
 ## Overview
 ## Overview
 
 
@@ -23,7 +23,6 @@ The translation files are quite simple: it’s only a matter of returning a PHP
 
 
 ```php
 ```php
 <?php
 <?php
-
 return array(
 return array(
 	'action' => [
 	'action' => [
 		'actualize' => 'Actualiser',
 		'actualize' => 'Actualiser',
@@ -37,7 +36,7 @@ return array(
 		'about' => 'À propos de FreshRSS',
 		'about' => 'À propos de FreshRSS',
 	),
 	),
 	// ...
 	// ...
-];
+);
 ```
 ```
 
 
 Each value can be referenced by a key: it consists of a series of identifiers separated by dots. The first identifier indicates from which file to extract the translation, while the following ones indicate array entries. Thus, the `gen.freshrss.about` key is referencing the `about` entry from the `freshrss` entry which is part of the main array returned by the `gen.php` file. This allows us to further organize our translation files.
 Each value can be referenced by a key: it consists of a series of identifiers separated by dots. The first identifier indicates from which file to extract the translation, while the following ones indicate array entries. Thus, the `gen.freshrss.about` key is referencing the `about` entry from the `freshrss` entry which is part of the main array returned by the `gen.php` file. This allows us to further organize our translation files.

+ 29 - 4
docs/en/users/05_Configuration.md

@@ -3,13 +3,38 @@
 
 
 ## Language
 ## Language
 
 
-FreshRSS is currently available in 14 languages. After confirming your choice, the interface will be displayed in your preferred language.
+FreshRSS is currently available in 22 languages. After confirming your choice, the interface will be displayed in your preferred language.
 Depending on the language chosen, parts of the interface may not be not translated yet. If you’re willing to help translate
 Depending on the language chosen, parts of the interface may not be not translated yet. If you’re willing to help translate
 the missing bits or would like to add a new language, please take a look at how you can [contribute to the project](../contributing.md#contribute-to-internationalization-i18n).
 the missing bits or would like to add a new language, please take a look at how you can [contribute to the project](../contributing.md#contribute-to-internationalization-i18n).
 
 
-Some parts of FreshRSS aren’t translated and aren’t intended to be translated either. For now, this includes the logs visible in the application as well as the log generated by automatic update scripts.
-
-Available languages are: cz, de, en, es, fr, he, it, ko, nl, oc, pt-br, ru, tr, zh-cn.
+Some parts of FreshRSS are not translated and are not intended to be translated either. For now, this includes the logs visible in the application as well as the log generated by automatic update scripts.
+
+Available languages are:
+
+| Language (English name) | Language (Endonym) | Ordered by language code (ISO-639-1) |
+|:------------------------|:-----------------------|:-------------------------------------|
+| Czech                   | Čeština                | cz                                   |
+| German                  | Deutsch                | de                                   |
+| Greek                   | Ελληνικά               | el                                   |
+| English                 | English                | en                                   |
+| English (United States) | English (United States) | en-us                               |
+| Spanish                 | Español                | es                                   |
+| French                  | Français               | fr                                   |
+| Hebrew                  | עברית                  | he                                   |
+| Indonesian              | Bahasa Indonesia       | id                                   |
+| Italian                 | Italiano               | it                                   |
+| Japanease               | 日本語                  | ja                                   |
+| Korean                  | 한국어                  | ko                                   |
+| Latvian                 | Latviešu               | lv                                   |
+| Dutch                   | Nederlands             | nl                                   |
+| Occitan                 | Occitan                | oc                                   |
+| Polish                  | Polski                 | pl                                   |
+| Brazilian Portuguese    | Português (Brasil)     | pt-br                                |
+| Russian                 | Русский                | ru                                   |
+| Slovak                  | Slovenčina             | sk                                   |
+| Turkish                 | Türkçe                 | tr                                   |
+| Chinese (Simplified, People’s Republic of China) | 简体中文      | zh-cn                 |
+| Chinese (Traditional, Taiwan) | 正體中文          | zh-tw                                |
 
 
 ## Theme
 ## Theme
 
 

+ 1 - 1
docs/en/users/08_sharing_services.md

@@ -8,7 +8,7 @@ FreshRSS has the option to share links with a bunch of services.
 |:--------------|:-------------------------------------------------------|:--------------------------------------------------------------|
 |:--------------|:-------------------------------------------------------|:--------------------------------------------------------------|
 | Clipboard     | Copy article link into the operation system clipboard | |
 | Clipboard     | Copy article link into the operation system clipboard | |
 | Email         | Open the email app to send the article link            | |
 | Email         | Open the email app to send the article link            | |
-| Print         | Open browser's print dialog to print out the article   | |
+| Print         | Open browsers print dialog to print out the article   | |
 
 
 ## Available Services: Hosted Services
 ## Available Services: Hosted Services
 
 

+ 1 - 1
docs/en/users/10_filter.md

@@ -103,7 +103,7 @@ Combining several search criteria implies a logical *and*, but the keyword ` OR
 can be used to combine several search criteria with a logical *or* instead: `author:Dupont OR author:Dupond`
 can be used to combine several search criteria with a logical *or* instead: `author:Dupont OR author:Dupond`
 
 
 You don’t have to do anything special to combine multiple negative operators. Writing `!intitle:'thing1' !intitle:'thing2'` implies AND, see above. For more pointers on how AND and OR interact with negation, see [this GitHub comment](https://github.com/FreshRSS/FreshRSS/issues/3236#issuecomment-891219460).
 You don’t have to do anything special to combine multiple negative operators. Writing `!intitle:'thing1' !intitle:'thing2'` implies AND, see above. For more pointers on how AND and OR interact with negation, see [this GitHub comment](https://github.com/FreshRSS/FreshRSS/issues/3236#issuecomment-891219460).
-Additional reading: [De Morgan's laws](https://en.wikipedia.org/wiki/De_Morgan%27s_laws).
+Additional reading: [De Morgans laws](https://en.wikipedia.org/wiki/De_Morgan%27s_laws).
 
 
 Finally, parentheses may be used to express more complex queries, with basic negation support:
 Finally, parentheses may be used to express more complex queries, with basic negation support:
 
 

+ 6 - 4
docs/fr/internationalization.md

@@ -1,5 +1,10 @@
 # Gestion de la traduction
 # Gestion de la traduction
 
 
+Grâce à nos contributeurs, FreshRSS est traduit dans [plus de 20 langues](./users/05_Configuration.md#language).
+Cette section expliquera les bases de l’internationalisation dans FreshRSS, de la traduction de l’application dans votre propre langue à la réalisation d’un changement spécifique.
+
+## Aperçu
+
 Il est fréquent (et c’est un euphémisme) de vouloir afficher des phrases à
 Il est fréquent (et c’est un euphémisme) de vouloir afficher des phrases à
 l’utilisateur. Dans l’exemple précédent par exemple, nous affichions un
 l’utilisateur. Dans l’exemple précédent par exemple, nous affichions un
 feedback à l’utilisateur en fonction du résultat d’une validation de
 feedback à l’utilisateur en fonction du résultat d’une validation de
@@ -31,7 +36,6 @@ retourner un tableau PHP contenant les traductions. Extrait du fichier
 
 
 ```php
 ```php
 <?php
 <?php
-
 return array(
 return array(
 	'action' => [
 	'action' => [
 		'actualize' => 'Actualiser',
 		'actualize' => 'Actualiser',
@@ -44,9 +48,7 @@ return array(
 		'_' => 'FreshRSS',
 		'_' => 'FreshRSS',
 		'about' => 'À propos de FreshRSS',
 		'about' => 'À propos de FreshRSS',
 	),
 	),
-];
-
-?>
+);
 ```
 ```
 
 
 Pour accéder à ces traductions, `Minz_Translate` va nous aider à l’aide de
 Pour accéder à ces traductions, `Minz_Translate` va nous aider à l’aide de

+ 29 - 5
docs/fr/users/05_Configuration.md

@@ -15,8 +15,32 @@ vocation à l’être. Pour le moment, les logs visibles dans l’application
 ainsi que celle générées par le script de mise à jour automatique en font
 ainsi que celle générées par le script de mise à jour automatique en font
 partie.
 partie.
 
 
-Les langues disponibles sont : cz, de, en, es, fr, he, it, ko, nl, oc,
-pt-br, ru, tr, zh-cn.
+Les langues disponibles sont:
+
+| Langue (nom français)   | Langue (endonyme)      | Classé par code de langue (ISO-639-1) |
+|:------------------------|:-----------------------|:-------------------------------------|
+| Tchèque                 | Čeština                | cz                                   |
+| Allemand                | Deutsch                | de                                   |
+| Grec                    | Ελληνικά               | el                                   |
+| Anglais                 | English                | en                                   |
+| Anglais (États-Unis)    | English (United States) | en-us                               |
+| Espagnol                | Español                | es                                   |
+| Français                | Français               | fr                                   |
+| Hébreu                  | עברית                  | he                                   |
+| Indonésien              | Bahasa Indonesia       | id                                   |
+| Italien                 | Italiano               | it                                   |
+| Japonais                | 日本語                  | ja                                   |
+| Coréen                  | 한국어                  | ko                                   |
+| Letton                  | Latviešu               | lv                                   |
+| Néerlandais             | Nederlands             | nl                                   |
+| Occitan                 | Occitan                | oc                                   |
+| Polonais                | Polski                 | pl                                   |
+| Portugais brésilien     | Português (Brasil)     | pt-br                                |
+| Russe                   | Русский                | ru                                   |
+| Slovaque                | Slovenčina             | sk                                   |
+| Turc                    | Türkçe                 | tr                                   |
+| Chinois (simplifié, République populaire de Chine) | 简体中文      | zh-cn               |
+| Chinois (traditionnel, Taïwan) | 正體中文          | zh-tw                               |
 
 
 ## Thème
 ## Thème
 
 
@@ -27,16 +51,16 @@ propose 13 thèmes officiels :
 |:--------------|:-------------------------------------------------------|:--------------------------------------------------------------|
 |:--------------|:-------------------------------------------------------|:--------------------------------------------------------------|
 | Alternative Dark | Ghost | |
 | Alternative Dark | Ghost | |
 | Ansum | Thomas Guesnon  | |
 | Ansum | Thomas Guesnon  | |
-| Blue Lagoon     |Mister aiR | N'est plus pris en charge. Sera supprimé avec FreshRSS V1.22.0 |
+| Blue Lagoon     |Mister aiR | Nest plus pris en charge. Sera supprimé avec FreshRSS V1.22.0 |
 | Dark | AD | |
 | Dark | AD | |
 | Dark pink | Miicat_47 | |
 | Dark pink | Miicat_47 | |
-| Flat design | Marien Fressinaud | N'est plus pris en charge. Sera supprimé avec FreshRSS V1.22.0 |
+| Flat design | Marien Fressinaud | Nest plus pris en charge. Sera supprimé avec FreshRSS V1.22.0 |
 | Mapco | Thomas Guesnon  | |
 | Mapco | Thomas Guesnon  | |
 | Nord theme | joelchrono12 | |
 | Nord theme | joelchrono12 | |
 | Origine | Marien Fressinaud | (default theme) |
 | Origine | Marien Fressinaud | (default theme) |
 | Origine-compact | Kevin Papst | |
 | Origine-compact | Kevin Papst | |
 | Pafat | Plopoyop | |
 | Pafat | Plopoyop | |
-| Screwdriver | Mister aiR | N'est plus pris en charge. Sera supprimé avec FreshRSS V1.22.0 |
+| Screwdriver | Mister aiR | Nest plus pris en charge. Sera supprimé avec FreshRSS V1.22.0 |
 | Swage | Patrick Crandol | |
 | Swage | Patrick Crandol | |
 
 
 Si aucun de ceux proposés ne convient, il est toujours possible de [créer
 Si aucun de ceux proposés ne convient, il est toujours possible de [créer

+ 1 - 1
lib/Minz/CurrentPagePaginationException.php

@@ -1,7 +1,7 @@
 <?php
 <?php
 class Minz_CurrentPagePaginationException extends Minz_Exception {
 class Minz_CurrentPagePaginationException extends Minz_Exception {
 	public function __construct(int $page) {
 	public function __construct(int $page) {
-		$message = 'Page number `' . $page . '` doesn\'t exist';
+		$message = 'Page number `' . $page . '` doesnt exist';
 
 
 		parent::__construct ($message, self::ERROR);
 		parent::__construct ($message, self::ERROR);
 	}
 	}

+ 1 - 1
lib/Minz/Log.php

@@ -72,7 +72,7 @@ class Minz_Log {
 	 * Make sure we do not waste a huge amount of disk space with old log messages.
 	 * Make sure we do not waste a huge amount of disk space with old log messages.
 	 *
 	 *
 	 * This method can be called multiple times for one script execution, but its result will not change unless
 	 * This method can be called multiple times for one script execution, but its result will not change unless
-	 * you call clearstatcache() in between. We won't due do that for performance reasons.
+	 * you call clearstatcache() in between. We won’t do do that for performance reasons.
 	 *
 	 *
 	 * @param string $file_name
 	 * @param string $file_name
 	 * @throws Minz_PermissionDeniedException
 	 * @throws Minz_PermissionDeniedException

+ 8 - 9
lib/Minz/Migrator.php

@@ -28,7 +28,7 @@ class Minz_Migrator
 	 *                         been modified, or migrations path cannot be
 	 *                         been modified, or migrations path cannot be
 	 *                         read).
 	 *                         read).
 	 *
 	 *
-	 * @throws BadFunctionCallException if a callback isn't callable.
+	 * @throws BadFunctionCallException if a callback isnt callable.
 	 */
 	 */
 	public static function execute(string $migrations_path, string $applied_migrations_path) {
 	public static function execute(string $migrations_path, string $applied_migrations_path) {
 		$applied_migrations = @file_get_contents($applied_migrations_path);
 		$applied_migrations = @file_get_contents($applied_migrations_path);
@@ -58,8 +58,8 @@ class Minz_Migrator
 		if (!@mkdir($lock_path, 0770, true)) {
 		if (!@mkdir($lock_path, 0770, true)) {
 			// Someone is probably already executing the migrations (the folder
 			// Someone is probably already executing the migrations (the folder
 			// already exists).
 			// already exists).
-			// We should probably return something else, but we don't want the
-			// user to think there is an error (it's normal workflow), so let's
+			// We should probably return something else, but we dont want the
+			// user to think there is an error (it’s normal workflow), so let’s
 			// stick to this solution for now.
 			// stick to this solution for now.
 			// Another option would be to show him a maintenance page.
 			// Another option would be to show him a maintenance page.
 			Minz_Log::warning(
 			Minz_Log::warning(
@@ -93,7 +93,7 @@ class Minz_Migrator
 				'We weren’t able to unlink the migration executing folder, '
 				'We weren’t able to unlink the migration executing folder, '
 				. 'you might want to delete yourself: ' . $lock_path
 				. 'you might want to delete yourself: ' . $lock_path
 			);
 			);
-			// we don't return early because the migrations could have been
+			// we dont return early because the migrations could have been
 			// applied successfully. This file is not "critical" if not removed
 			// applied successfully. This file is not "critical" if not removed
 			// and more errors will eventually appear in the logs.
 			// and more errors will eventually appear in the logs.
 		}
 		}
@@ -122,8 +122,7 @@ class Minz_Migrator
 	 *
 	 *
 	 * The files starting with a dot are ignored.
 	 * The files starting with a dot are ignored.
 	 *
 	 *
-	 * @throws BadFunctionCallException if a callback isn't callable (i.e.
-	 *                                  cannot call a migrate method).
+	 * @throws BadFunctionCallException if a callback isn’t callable (i.e. cannot call a migrate method).
 	 */
 	 */
 	public function __construct(?string $directory = null) {
 	public function __construct(?string $directory = null) {
 		$this->applied_versions = [];
 		$this->applied_versions = [];
@@ -163,7 +162,7 @@ class Minz_Migrator
 	 *                           return true on success and must return false
 	 *                           return true on success and must return false
 	 *                           on error
 	 *                           on error
 	 *
 	 *
-	 * @throws BadFunctionCallException if the callback isn't callable.
+	 * @throws BadFunctionCallException if the callback isnt callable.
 	 */
 	 */
 	public function addMigration(string $version, ?callable $callback): void {
 	public function addMigration(string $version, ?callable $callback): void {
 		if (!is_callable($callback)) {
 		if (!is_callable($callback)) {
@@ -230,7 +229,7 @@ class Minz_Migrator
 	 */
 	 */
 	public function upToDate(): bool {
 	public function upToDate(): bool {
 		// Counting versions is enough since we cannot apply a version which
 		// Counting versions is enough since we cannot apply a version which
-		// doesn't exist (see setAppliedVersions method).
+		// doesnt exist (see setAppliedVersions method).
 		return count($this->versions()) === count($this->applied_versions);
 		return count($this->versions()) === count($this->applied_versions);
 	}
 	}
 
 
@@ -240,7 +239,7 @@ class Minz_Migrator
 	 * It only executes migrations AFTER the current version. If a migration
 	 * It only executes migrations AFTER the current version. If a migration
 	 * returns false or fails, it immediately stops the process.
 	 * returns false or fails, it immediately stops the process.
 	 *
 	 *
-	 * If the migration doesn't return false nor raise an exception, it is
+	 * If the migration doesnt return false nor raise an exception, it is
 	 * considered as successful. It is considered as good practice to return
 	 * considered as successful. It is considered as good practice to return
 	 * true on success though.
 	 * true on success though.
 	 *
 	 *

+ 2 - 2
lib/Minz/Session.php

@@ -61,8 +61,8 @@ class Minz_Session {
 	/**
 	/**
 	 * Allows you to retrieve a session variable
 	 * Allows you to retrieve a session variable
 	 * @param string $p the parameter to retrieve
 	 * @param string $p the parameter to retrieve
-	 * @param mixed|false $default the default value if the parameter doesn't exist
-	 * @return mixed|false the value of the session variable, false if doesn't exist
+	 * @param mixed|false $default the default value if the parameter doesnt exist
+	 * @return mixed|false the value of the session variable, false if doesnt exist
 	 */
 	 */
 	public static function param(string $p, $default = false) {
 	public static function param(string $p, $default = false) {
 		return $_SESSION[$p] ?? $default;
 		return $_SESSION[$p] ?? $default;

+ 2 - 2
lib/lib_rss.php

@@ -653,10 +653,10 @@ function checkCIDR(string $ip, string $range): bool {
 
 
 /**
 /**
  * Check if the client is allowed to send unsafe headers
  * Check if the client is allowed to send unsafe headers
- * This uses the REMOTE_ADDR header to determine the sender's IP
+ * This uses the REMOTE_ADDR header to determine the senders IP
  * and the configuration option "trusted_sources" to get an array of the authorized ranges
  * and the configuration option "trusted_sources" to get an array of the authorized ranges
  *
  *
- * @return bool, true if the sender's IP is in one of the ranges defined in the configuration, else false
+ * @return bool, true if the senders IP is in one of the ranges defined in the configuration, else false
  */
  */
 function checkTrustedIP(): bool {
 function checkTrustedIP(): bool {
 	if (FreshRSS_Context::$system_conf === null) {
 	if (FreshRSS_Context::$system_conf === null) {

+ 1 - 1
p/themes/Nord/README.md

@@ -1,6 +1,6 @@
 # FreshRSS-Nord-Theme
 # FreshRSS-Nord-Theme
 
 
-A simple theme based on Nord's color scheme for [FreshRSS](https://freshrss.org)
+A simple theme based on Nords color scheme for [FreshRSS](https://freshrss.org)
 
 
 You can see how it looks here. It features a compact layout and some custom icons.
 You can see how it looks here. It features a compact layout and some custom icons.
 ![Example](./thumbs/original.png)
 ![Example](./thumbs/original.png)

+ 1 - 1
p/themes/Nord/metadata.json

@@ -1,7 +1,7 @@
 {
 {
   "name": "Nord theme",
   "name": "Nord theme",
   "author": "joelchrono12",
   "author": "joelchrono12",
-  "description": "A simple theme based on Nord's color scheme",
+  "description": "A simple theme based on Nords color scheme",
   "version": 0.1,
   "version": 0.1,
   "files": ["_frss.css","nord.css"],
   "files": ["_frss.css","nord.css"],
   "theme-color": "#2e3440"
   "theme-color": "#2e3440"

+ 1 - 2
tests/lib/Minz/MigratorTest.php

@@ -295,8 +295,7 @@ class MigratorTest extends TestCase
 
 
 		$this->assertTrue($result);
 		$this->assertTrue($result);
 		$versions = file_get_contents($applied_migrations_path);
 		$versions = file_get_contents($applied_migrations_path);
-		// if the order changes, it probably means the first versions comparison
-		// test doesn't work anymore
+		// if the order changes, it probably means the first versions comparison test doesn’t work anymore
 		$this->assertSame("2019_12_23_Baz\n2019_12_22_FooBar", $versions);
 		$this->assertSame("2019_12_23_Baz\n2019_12_22_FooBar", $versions);
 		@unlink($applied_migrations_path);
 		@unlink($applied_migrations_path);
 	}
 	}