Files
oddmuse/t/languages.t
Alex Schroeder c0a6bfebf2 Add language to body element and various divs
The benefit is that this allows us to use the CSS rule that allows the
browser to hyphenate words:

body { hyphens: auto }

This required a number of changes.

wiki.pl

- new option, $CurrentLanguage
- GetHtmlHeader adds lang attribute to body
- PrintAllPages adds lang attribute to div
- PrintPageContent adds lang attribute to div
- PageHtml adds div with lang attribute
- GetLanguages sorts languages by occurences
- GetLanguage is new and returns the first language of GetLanguages

Modules that had to be changed because they refer to the divs that
have now been changed:

- crossbar.pl

Tests that had to be changed:

- atom.t
- crossbar.t
- hr.t
- languages.t
- portrait-support.t
- rss.t
2019-09-27 21:34:32 +02:00

53 lines
2.4 KiB
Perl

# Copyright (C) 2006-2019 Alex Schroeder <alex@gnu.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
require './t/test.pl';
package OddMuse;
use Test::More;
use utf8; # tests contain UTF-8 characters and it matters
%Languages = ('de' => '\b(der|die|das|und|oder)\b',
'fr' => '\b(et|le|la|ne|pas)\b', );
is(GetLanguages('This is English text and cannot be identified.'), '', 'unknown language');
is(GetLanguages('Die Katze tritt die Treppe krumm.'), '', 'not enough German words');
is(GetLanguages('Die Katze tritt die Treppe und die Stiege krumm.'), 'de', 'enough German words');
is(GetLanguages('Le chat fait la même chose et ne chante pas.'), 'fr', 'enough French words');
is(GetLanguages('Die Katze tritt die Treppe und die Stiege krumm. ' # 4 matches
. 'Le chat fait la même chose et ne chante pas.' # 5 matches
), 'fr,de', 'both German and French');
is(GetLanguage('This is English text and cannot be identified.'), 'en', 'now it defaults to English');
is(GetLanguage('Die Katze tritt die Treppe krumm.'), 'en', 'not enough German words but it defaults to English');
is(GetLanguage('Die Katze tritt die Treppe krumm und so.'), 'de', 'three German words');
is(GetLanguage('Die Katze tritt die Treppe und die Stiege krumm. ' # 4 matches
. 'Le chat fait la même chose et ne chante pas.' # 5 matches
), 'fr', 'French has the most hits');
my $id = 'Test';
my $text = 'Die Katze tritt die Treppe und die Stiege krumm. ' # 4 matches
. 'Le chat fait la même chose et ne chante pas.'; # 5 matches
AppendStringToFile($ConfigFile,<<'EOT');
%Languages = ('de' => '\b(der|die|das|und|oder)\b',
'fr' => '\b(et|le|la|ne|pas)\b', );
EOT
test_page(update_page($id, $text), /Die Katze/);
test_page(ReadFileOrDie($RcFile), /\bfr,de\b/);
test_page(get_page($id), /lang="fr"/);
done_testing;