forked from chaosarium/lwt
-
Notifications
You must be signed in to change notification settings - Fork 20
/
info.html
4527 lines (4487 loc) · 236 KB
/
info.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta http-equiv="content-language" content="en-US" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta name="keywords" content="Language Learning Texts LWT Software Freeware LingQ Alternative AJATT Khatzumoto MCD MCDs Massive Context Cloze Deletion Cards Tool Stephen Krashen Second Language Acquisition Steve Kaufmann" />
<meta name="description" content="Learning with Texts (LWT) is a tool for Language Learning, inspired by Stephen Krashen's principles in Second Language Acquisition, Steve Kaufmann's LingQ System and ideas (e. g. Massive-Context Cloze Deletion Cards = MCDs) from Khatzumoto, published at AJATT - All Japanese All The Time. It is an Alternative to LingQ, 100 % free, Open Source, and in the Public Domain." />
<meta name="revisit-after" content="2 days" />
<meta name="viewport" content="width=1280, user-scalable=yes" />
<link rel="apple-touch-icon" href="../img/apple-touch-icon-57x57.png" />
<link rel="apple-touch-icon" sizes="72x72" href="../img/apple-touch-icon-72x72.png" />
<link rel="apple-touch-icon" sizes="114x114" href="../img/apple-touch-icon-114x114.png" />
<link rel="apple-touch-startup-image" href="../img/apple-touch-startup.png" />
<style type="text/css">
@import url(../css/styles.css);
.hidden {display:none;}
</style>
<script type="text/javascript" src="../js/jquery.js"></script>
<script type="text/javascript">
/**
* Perform an AJAX query to get the current theme style sheet.
*
* @since 2.9.0 Function is modified to use JSON with the REST API.
*/
function ajaxGetTheme () {
$.getJSON(
'../api.php/v1/settings/theme-path',
{
path: '../css/styles.css'
},
function (data) {
if ("error" in data)
return;
const path = data["theme_path"].trim();
if (path.endsWith("styles.css")) {
$('style').html(
"@import url(../" + path + ");"
);
}
}
)
.always(function () {
$('html').show();
});
}
/**
* Jump to a specific element
*/
function topicJump (qm) {
const val = qm.options[qm.selectedIndex].value;
if (val != '') {
location.href = '#' + val;
}
qm.selectedIndex = 0;
}
$('html').addClass('hidden');
$(document).ready(ajaxGetTheme);
</script>
<title>
Learning with Texts :: Help/Information
</title>
</head>
<body>
<div id="floatdiv">
<a href="#">↑ TOP ↑</a>
<div> </div>
<a href="#preface">Preface</a>
<a href="#current">Curr. Version </a>
<a href="#abstract">Abstract</a>
<a href="#install">Installation</a>
<a href="#postinstall">Post-<wbr>Installation</a>
<a href="#features">Features</a>
<a href="#newfeatures">New Features</a>
<a href="#screencasts">Screencasts</a>
<a href="#links">Links</a>
<a href="#restrictions">Restrictions</a>
<a href="#UNLICENSE">License</a>
<a href="#thirdpartylicenses">Third Party</a>
<a href="#learn">How to learn</a>
<a href="#howto">How to use</a>
<a href="#faq">Q & A</a>
<div> </div>
<a href="#ipad">Setup Tablets</a>
<a href="#langsetup">Lang. Setup</a>
<a href="#termscores">Term Scores</a>
<a href="#keybind">Key Bindings</a>
<a href="#export">Export Template</a>
<div> </div>
<a href="#contribute">Contribute</a>
<a href="#wordpress">WordPress Integration</a>
<a href="#api">Public API</a>
<a href="#database">Database</a>
<a href="#CHANGELOG">Changelog</a>
</div>
<div style="margin-right:100px;">
<h4>
<a href="../index.php" target="_top">
<img src="../img/lwt_icon_big.png" class="lwtlogoright" alt="Logo" />
Learning with Texts
</a>
<br /><br />
<span class="bigger">Help/Information</span>
</h4>
<p class="inline">
Jump to topic:
<select id="topicjump" onchange="topicJump(this);">
<option value="" selected="selected">
[Select...]
</option>
<option value="preface">
Preface
</option>
<option value="current">
Current Version
</option>
<option value="abstract">
Abstract
</option>
<option value="install">
Installation
</option>
<option value="postinstall">
Post-Installation Steps
</option>
<option value="features">
Features
</option>
<option value="newfeatures">
New in this Version
</option>
<option value="screencasts">
Screencasts
</option>
<option value="links">
Links
</option>
<option value="restrictions">
Restrictions
</option>
<option value="UNLICENSE">
License
</option>
<option value="learn">
How to learn
</option>
<option value="howto">
How to use
</option>
<option value="faq">
Questions and Answers
</option>
<option value="ipad">
Setup for Tablets
</option>
<option value="langsetup">
Language Setup
</option>
<option value="termscores">
Term Scores
</option>
<option value="keybind">
Key Bindings
</option>
<option value="export">
Export Template
</option>
<option value="contribute">
Contribute
</option>
<option value="wordpress">
WordPress Integration
</option>
<option value="api">
Public API
</option>
<option value="database">
Database Structure
</option>
<option value="CHANGELOG">
Changelog
</option>
</select>
</p>
<h2 id="preface" name="preface">▶ Preface - <a href="#">[↑]</a></h2>
<blockquote>
<p><strong>THIS IS A THIRD PARTY VERSION</strong> - IT DIFFERS IN MANY RESPECTS FROM THE OFFICIAL LWT VERSION! See the <a href="info.html#newfeatures">new features</a> for more information.</p>
</blockquote>
<h3>Preface by lang-learn-guy (original author)</h3>
<ul>
<li>I started this software application in 2010 as a hobby project for my personal learning (reading & listening to foreign texts, saving & reviewing new words and expressions).</li>
<li>In June 2011, I decided to publish the software in the hope that it will be useful to other language learners around the world.</li>
<li>The software is 100 % free, open source, and in the public domain. You may do with it what you like: use it, improve it, change it, publish an improved version, even use it within a commercial product.</li>
<li>English is not my mother tongue - so please forgive me any mistakes.</li>
<li>A piece of software will be never completely free of "bugs" - please inform me of any problem you will encounter. Your feedback and ideas are always welcome.</li>
<li>My programming style is quite chaotic, and my software is mostly undocumented. This will annoy people with much better programming habits than mine, but please bear in mind that LWT is a one-man hobby project and completely free.</li>
<li>Thank you for your attention. I hope you will enjoy this application as I do every day.</li>
</ul>
<h3>Contributions by HugoFara (GitHub version maintainer)</h3>
<p>I started using LWT in 2021, and continued its development almost instantly. I felt that the core idea was very good, but its implementation seemed unadapted, and the code was quite obfuscated. While I do not have any official responsibility to LWT (we don't have any kind of official agreement with lang-learn-guy), I am the the <em>de facto</em> maintainer of the community version. I dedicated myself to the following points (see the <a href="https://github.com/HugoFara/lwt/discussions/6">GitHub post</a>):</p>
<ul>
<li>Make LWT Open Source: document and refactor code</li>
<li>Meet the HTML5 standards: the interface was relying on deprecated systems like frames, making it difficult to use on small screens.</li>
<li>Simplify users' lives: avoid complex installation or procedures whenever possible.</li>
</ul>
<p>If you spot any problem, please post any <a href="https://github.com/HugoFara/lwt/issues">issue on GitHub</a>, and we will look at it.</p>
<p>While work is not yet finished, I also aim to expand LWT:</p>
<ul>
<li>Better UI: custom themes and better default appearance</li>
<li>Better UX: as of today (2022), 60 % of the web is done through mobile devices. It means less content at once and more intuitive behaviors.</li>
<li>Sounds: language learning is not just language reading.
<ul>
<li>Text-to-speech features.</li>
<li>Motivational sounds when testing terms to makes things more lively.</li>
</ul>
</li>
</ul>
<p>But there is much more! The community version of LWT is no longer the feat of one man, it belongs to everyone. As such, it gets well easier to implement new features, discuss and exchange code and ideas. I don't know if LWT contains <em>your</em> killer feature, but I can say that it <em>can be implemented</em> with this version. Enjoy!</p>
<h2 name="current" id="current">
▶ Current Version - <a href="#">[↑]</a>
</h2>
<p>
The current version is 2.10.0-fork (April 01 2024).
<br>
<a href="#CHANGELOG">View the Changelog.</a>
</p>
<h2 id="abstract" name="abstract">▶ Abstract - <a href="#">[↑]</a></h2>
<p><a href="https://sourceforge.net/projects/learning-with-texts/"><em>Learning with Texts</em> (LWT)</a> is a tool for Language Learning by reading texts.
It is inspired by:</p>
<ul>
<li>
<a href="http://sdkrashen.com">Stephen Krashen's</a> principles in Second Language Acquisition,</li>
<li>Steve Kaufmann's <a href="http://lingq.com">LingQ</a> System and</li>
<li>Ideas from Khatzumoto, published at <a href="http://www.alljapaneseallthetime.com">"AJATT - All Japanese All The Time"</a>.</li>
</ul>
<p>You define languages you want to learn and import texts you want to use for learning. While listening to the optional audio, you read the text, save, review and test "terms" (words or multi word expressions, 2 to 9 words).</p>
<p>In new texts all your previously saved words and expressions are displayed according to their current learn statuses, tooltips show translations and romanizations (readings), editing, changing the status, dictionary lookup, etc. is just a click away.</p>
<p>Import of terms in TSV/CSV format, export in TSV format, and export to <a href="http://ankisrs.net">Anki</a> (prepared for cloze tests), are also possible.</p>
<p>To run LWT, you'll need:</p>
<ol>
<li>
<strong>A modern web browser</strong>. Do not use Internet Explorer, any other browser (Chrome, Firefox, Safari or Edge) should be fine.</li>
<li>
<strong>A local web server</strong>.
An easy way to install a local web server are preconfigured packages like
<ul>
<li>
<a href="http://www.easyphp.org/">EasyPHP</a> or <a href="https://www.apachefriends.org/download.html">XAMPP</a> (Windows), or</li>
<li>
<a href="http://mamp.info/en/index.html">MAMP</a> (macOS), or</li>
<li>a <a href="http://en.wikipedia.org/wiki/LAMP_%28software_bundle%29">LAMP (Linux-Apache-MariaDB-PHP) server</a> (Linux).</li>
</ul>
</li>
<li>
<strong>The LWT Application</strong>. The latest version <em>lwt_v_x_y.zip</em> can be downloaded at <a href="https://github.com/HugoFara/lwt/archive/refs/heads/master.zip">https://github.com/HugoFara/lwt/archive/refs/heads/master.zip</a>. View the <a href="info.html#install">install section</a>.</li>
</ol>
<h2 id="install" name="install">▶ LWT Installation - <a href="#">[↑]</a></h2>
<ul>
<li>
<em>Last update</em>: February 20, 2023</li>
</ul>
<p>Let's install the LWT server. LWT uses a client-server architecture, which means it
will run in your browser as a classical website. You can use any computer as the
server, here are some ways to do it.</p>
<h3>A bird's-eye view</h3>
<p>Whatever installation you choose, the steps will look like the following:</p>
<ol>
<li>Set-up a server with a database system.</li>
<li>Download <a href="https://github.com/HugoFara/lwt/releases">LWT</a>.</li>
<li>Create <code>connect.inc.php</code> file with your password.</li>
<li>Start the server and ready to go!</li>
</ol>
<p>There are two main ways to install LWT: on your computer or using <a href="#run-in-a-docker-container">containers</a>. We recommend the first solution as the most straightforward. The second solution has a simpler installation method, but takes a lot of storage.</p>
<h3>Windows 10/11</h3>
<p>Two main softwares can be used to set up a local server on your computer: XAMPP and EasyPHP. We recommand XAMPP because it supports higher PHP version, but feel free to use any softare you like.</p>
<h4>Using XAMPP (recommended)</h4>
<ol>
<li>
<p>Install XAMPP</p>
<ol>
<li>Go to <a href="https://www.apachefriends.org/download.html">https://www.apachefriends.org/download.html</a>
</li>
<li>Download "XAMPP for <strong>Windows</strong>". PHP starting from <strong>8.0</strong> is supported.</li>
<li>Open your Downloads folder and run the downloaded "xampp-windows-x64-xxx-installer.exe". Please install the components Apache, MySQL, PHP and phpMyAdmin into the folder C:\xampp.</li>
</ol>
</li>
<li>
<p>Get the <a href="https://github.com/HugoFara/lwt/releases">latest GitHub release</a>, unzip it.</p>
<p>You can also try to download the <a href="https://github.com/HugoFara/lwt/archive/refs/heads/master.zip">latest stable version</a> if you want the cutting-edge updates (that may include some bugs)</p>
</li>
<li>
<p>Now go into "C:\xampp\htdocs\lwt". Rename the file "connect_xampp.inc.php" to "connect.inc.php". Sometimes the "php" extension is hidden, so be careful! You can display file extensions via the Windows Explorer settings and check it.</p>
</li>
<li>
<p>Start LWT server</p>
<ol>
<li>Start the "XAMPP Control Panel" ("C:\xampp\xampp-control.exe") and start the two modules Apache and MySQL. Now the two module names should have a green background color.</li>
<li>LWT can now be started. Open a browser, and open <a href="http://localhost/lwt">http://localhost/lwt</a> (please bookmark).</li>
</ol>
</li>
<li>
<p>You may now define the first language you want to learn or install the LWT demo database.</p>
</li>
</ol>
<p>If you start up Windows, you must repeat steps 4 and 5.</p>
<p>If you want to start "XAMPP Control Panel" every time you start Windows and to avoid Step 4.1, put a "XAMPP Control Panel" link to "C:\xampp\xampp-control.exe" into "C:\Users(YourUID)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup". To autostart also the Apache and MySQL modules, please open "Config" within the XAMPP Control Panel and check the two checkboxes.</p>
<blockquote>
<p>Hint: To fix a "XAMPP Control Panel" error "Xampp-control.ini Access is denied", please read and do the instructions in <a href="https://www.codermen.com/fix-xampp-server-error-xampp-control-ini-access-is-denied/">https://www.codermen.com/fix-xampp-server-error-xampp-control-ini-access-is-denied/</a></p>
</blockquote>
<p>Now you must only do step 4.2 to start LWT.</p>
<h4>Using EasyPHP</h4>
<ol>
<li>
<p>Get Visual C++</p>
<ol>
<li>Download "vcredist_x86.exe" from <a href="https://www.microsoft.com/en-us/download/details.aspx?id=30679">https://www.microsoft.com/en-us/download/details.aspx?id=30679</a>
</li>
<li>Choose the x86 version and download.</li>
<li>Run the installer "vcredist_x86.exe" in the Downloads folder.</li>
</ol>
</li>
<li>
<p>Get EasyPHP</p>
<ol>
<li>Go to <a href="https://www.easyphp.org/easyphp-devserver.php">https://www.easyphp.org/easyphp-devserver.php</a>
</li>
<li>Download "EasyPHP DevServer 17.0".</li>
<li>Open your Downloads folder and run the downloaded "EasyPHP-Devserver-17.0-setup.exe".</li>
<li>Install into "C:\Program Files (x86)\EasyPHP-Devserver-17".</li>
</ol>
</li>
<li>
<p>Get the <a href="https://github.com/HugoFara/lwt/releases">latest GitHub release</a>, unzip it.</p>
<p>You can also try to download the <a href="https://github.com/HugoFara/lwt/archive/refs/heads/master.zip">latest stable version</a> if you want the cutting-edge updates (that may include some bugs)</p>
</li>
<li>
<p>Install everything</p>
<ol>
<li>Go to "C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\lwt".</li>
<li>Rename the file "connect_easyphp.inc.php" to "connect.inc.php". Sometimes the "php" extension is hidden, so be careful! You can display file extensions via the Windows Explorer settings and check it.</li>
</ol>
</li>
<li>
<p>Start EasyPHP</p>
<ol>
<li>Start EasyPHP via Desktop Icon (Devserver 17). In the Task Bar near the clock appears the EasyPHP app icon (it may be hidden!).</li>
<li>LWT can now be started. Right-Click on the EasyPHP icon in the taskbar, choose "Servers->Start/Restart all Servers", open a browser, and open <a href="http://127.0.0.1/lwt">http://127.0.0.1/lwt</a> (please bookmark).</li>
</ol>
</li>
<li>
<p>You may now define the first language you want to learn or install the LWT demo database.</p>
</li>
</ol>
<p>If you start up EasyPHP, you must repeat step 5.1 and 5.2.</p>
<p>If you want to start EasyPHP every time you start Windows and avoid step 5.1, put an EasyPHP link into "C:\Users(YourUID)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup".</p>
<p>Now you must only do step 5.2 to start LWT.</p>
<h3>macOS 10.10+</h3>
<blockquote>
<p>This section may be obsolete! Your help is welcome!</p>
</blockquote>
<ol>
<li>
<p>Go to <a href="https://www.mamp.info/en/downloads/">https://www.mamp.info/en/downloads/</a></p>
</li>
<li>
<p>Download "MAMP & MAMP PRO" (currently version 6.6).</p>
</li>
<li>
<p>Double-click on the downloaded installation package "MAMP_MAMP_PRO_xxx.pkg", accept the license, click on "Install for all users..." and on "Continue", on the next panel titled "Standard Install on Macintosh HD" click on "Customize", deselect "MAMP PRO", and click Install. You must enter your password. After this step MAMP is installed within a folder named "MAMP" in the Applications folder.</p>
</li>
<li>
<p>Get the <a href="https://github.com/HugoFara/lwt/releases">latest GitHub release</a>, unzip it.</p>
<p>You can also try to download the <a href="https://github.com/HugoFara/lwt/archive/refs/heads/master.zip">latest stable version</a> if you want the cutting-edge updates (that may include some bugs)</p>
</li>
<li>
<p>Go to <code>/Applications/MAMP/htdocs/lwt</code>. Rename the file <code>connect_mamp.inc.php</code> to <code>connect.inc.php</code>.</p>
</li>
<li>
<p>Open <code>MAMP.app</code> in <code>/Applications/MAMP</code>. Accept the messages from the firewall. Apache and MySQL start automatically.</p>
</li>
<li>
<p>LWT can now be started in your web browser, go to: <a href="http://localhost:8888/lwt">http://localhost:8888/lwt</a>.</p>
</li>
<li>
<p>You may define the first language you want to learn or install the LWT demo database.</p>
</li>
</ol>
<p>If you want to use LWT again, just do steps 6 and 7.
The local webserver (MAMP) will be automatically stopped by quitting the MAMP application.</p>
<h3>Linux</h3>
<h4>Using the Linux Installer</h4>
<p>We provide an installer that runs the commands described in the next section. To use the installer:</p>
<ol>
<li>Download the <a href="https://github.com/HugoFara/lwt/releases/latest">latest GitHub release</a>, unzip it.</li>
<li>Open a terminal in the downloaded folder, enable execution with <code>chmod +x ./INSTALL.sh</code>.</li>
<li>Run the script with <code>./INSTALL.sh</code>.</li>
<li>You can start using LWT at <a href="http://localhost/lwt">http://localhost/lwt</a>
</li>
</ol>
<h4>Installing on Linux by hand</h4>
<p>The following instruction were tested on Raspbian Stretch.</p>
<ol>
<li>
<p>Open a terminal, type and execute the following commands:</p>
<ol>
<li>
<p>Installation of LAMP:</p>
<pre><code class="language-bash">sudo apt-get update
sudo apt-get install apache2 libapache2-mod-php php php-mbstring php-mysql php-xml mariadb-server
</code></pre>
<p>Note: you should be able to freely switch between MySQL and MariaDB.</p>
</li>
<li>
<p>Check if everything is okay:</p>
<ul>
<li>
<code>php -v</code> should show a PHP version equal or above to 8.0.0.</li>
<li>
<a href="http://locahlhost">http://locahlhost</a> should display a nice web page.</li>
<li>
<code>mysql -V</code> should work.</li>
</ul>
</li>
<li>
<p>Enable the extensions</p>
<ol>
<li>Go to your PHP folder (<code>/etc/php/{{desired PHP version}}/{{PHP type}}/</code>)</li>
<li>Run <code>sudo nano php.ini</code>.</li>
<li>Delete the ";" symbols before <code>extension=mbstring</code> and <code>extension=mysqli</code>.</li>
</ol>
</li>
<li>
<p>Set MySQL root Password to "abcxyz"</p>
<pre><code class="language-bash">sudo mysql
</code></pre>
<p>Then type</p>
<pre><code class="language-MySQL">ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'abcxyz';
FLUSH privileges;
QUIT;
</code></pre>
</li>
<li>
<p>(Optionnal) Check MySQL access</p>
<pre><code class="language-bash">mysql -u root -p
abcxyz
</code></pre>
<p>If you see the MySQL prompt <code>mysql></code> after the first command, everything is OK. Quit with</p>
<pre><code class="language-MySQL">QUIT;
</code></pre>
</li>
</ol>
</li>
<li>
<p>Get the <a href="https://github.com/HugoFara/lwt/releases">latest GitHub release</a>.</p>
<p>You can also try to download the <a href="https://github.com/HugoFara/lwt/archive/refs/heads/master.zip">latest stable version</a> if you want the cutting-edge updates (that may include some bugs)</p>
</li>
<li>
<p>Unzip it.</p>
</li>
<li>
<p>Rename the file <code>connect_xampp.inc.php</code> (in the unzipped folder) to <code>connect.inc.php</code>.</p>
</li>
<li>
<p>Edit <code>connect.inc.php</code> and set the MySQL password in line
<code>$passwd = "";</code>. Change it to <code>$passwd = "abcxyz";</code>. Save the edited file connect.inc.php.</p>
</li>
<li>
<p>Open a terminal, type and execute the following commands:</p>
<pre><code class="language-bash">sudo rm /var/www/html/index.html
sudo mv /[... Path to downloaded LWT ...]/lwt /var/www/html
sudo chmod -R 755 /var/www/html/lwt
sudo service apache2 restart
sudo service mysql restart
</code></pre>
</li>
<li>
<p>LWT can now be started in your web browser, go to: <a href="http://localhost/lwt">http://localhost/lwt</a>.</p>
</li>
<li>
<p>You may install the LWT demo database, or define the first language you want to learn.</p>
</li>
</ol>
<p>If you want to use LWT again, just do step 7.</p>
<h3>Run in a Docker container</h3>
<p><a href="https://docs.docker.com/get-docker/">Docker</a> is the easiest way to install LWT,
but it will use more or less 1 GB on your system.</p>
<h4>Using the installer</h4>
<p>For an light-weight installer, you may use
<a href="https://github.com/HugoFara/lwt-docker-installer">HugoFara/lwt-docker-installer</a>.</p>
<h4>Build image from source</h4>
<p>Download the lwt, open a terminal inside it, then type</p>
<pre><code class="language-bash">docker compose up -d
</code></pre>
<p>By default the server can be accessed on port 8010 (<a href="http://localhost:8010/lwt">http://localhost:8010/lwt</a>).</p>
<p>To remove the created containers run</p>
<pre><code class="language-bash">docker compose down
</code></pre>
<h3>Dependency management with Composer</h3>
<p>If you have a technical knowledge of how Composer works for dependency management, you may consider using
Composer. It is <em>required for contributors only</em>, but advanced users may want to use it as well.
The official repository is at <a href="https://packagist.org/packages/hugofara/lwt">https://packagist.org/packages/hugofara/lwt</a>.</p>
<h3>Upgrade LWT</h3>
<ol>
<li>
<p>Backup the LWT directory. Backup your database (within LWT).</p>
</li>
<li>
<p>Get the <a href="https://github.com/HugoFara/lwt/releases">latest GitHub release</a>.</p>
<p>You can also try to download the <a href="https://github.com/HugoFara/lwt/archive/refs/heads/master.zip">latest stable version</a> if you want the cutting-edge updates (that may include some bugs)</p>
</li>
<li>
<p>Unzip it.</p>
</li>
<li>
<p>Copy the following (if not already at its place and OK) from your LWT backup into the LWT directory: "connect.inc.php" and the whole "media" sub-directory (if you created one; contains your MP3 audio files).</p>
</li>
<li>
<p>Clear the web browser cache and open LWT as usual.</p>
</li>
</ol>
<h3>Something Went Wrong</h3>
<p>Need more help? You can contact us through <a href="https://github.com/HugoFara/lwt/issues">GitHub</a> and <a href="https://discord.gg/xrkRZR2jtt">Discord</a>!</p>
<p>You can also consult the troubleshooting section of the documentation at <a href="https://hugofara.github.io/lwt/docs/info.html#faq">https://hugofara.github.io/lwt/docs/info.html#faq</a>.</p>
<p>Please note that <em>PHP below version 8.0 is no longer supported</em>.</p>
<h2 id="postinstall" name="postinstall">▶ Optional Post-Installation Steps - <a href="#">[↑]</a></h2>
<p>LWT is a all-in-one product, but you can extend its capabilities in various ways.
Here are the additional features unavailable by default.</p>
<h3>Parse Japanese with MeCab</h3>
<p><a href="https://taku910.github.io/mecab/">MeCab</a> is a Japanese parser. Installing it has
two main advantages:</p>
<ul>
<li>Much better parsing of Japanese texts than RegExp.</li>
<li>Automatic romanization of words.</li>
<li>Enables text-to-speech for any character group.</li>
</ul>
<h4>Installation</h4>
<h4>Standard Installtion</h4>
<ol>
<li>Follow the instructions to download MeCab at <a href="https://taku910.github.io/mecab/#install">https://taku910.github.io/mecab/#install</a>.</li>
<li>Add MeCab to your system PATH.</li>
<li>In LWT, go to "Edit Languages" → "Japanese" and change from the value for "RegExp Word Characters" to <code>mecab</code>.</li>
</ol>
<h4>Using Docker</h4>
<p>Original instructions provided <a href="https://nickramkissoon.medium.com/easily-set-up-and-use-mecab-with-docker-and-nodejs-5f01ae761a61">here</a>.</p>
<ol>
<li>
<p>Run your LWT container in interactive mode and install MeCab.</p>
<pre><code class="language-bash">docker exec -it lwt bash
apt-get update && apt-get install -y mecab libmecab-dev mecab-ipadic-utf8
</code></pre>
</li>
<li>
<p>In LWT, go to "Edit Languages" → "Japanese" and change from the value for "RegExp Word Characters" to <code>mecab</code>.</p>
</li>
</ol>
<h3>Automatic Translation</h3>
<h4>LibreTranslate</h4>
<p><a href="https://libretranslate.com/">LibreTranslate</a> is a great open-source tool that allows you to translate text and provides an API.
With it you can achieve the following:</p>
<ul>
<li>Translation of sentences without using Google Translate.</li>
<li>Automatic translation of words (so you don't need to fill by hand!).</li>
</ul>
<p><img src="../img/libretranslate_demo.png" alt="LibreTranslate Demo"></p>
<p>To use it, please read the following steps:</p>
<ol>
<li>
<a href="https://github.com/LibreTranslate/LibreTranslate#install-and-run">Install it</a> on a local or remote server or using Docker.</li>
<li>In LWT, go to "Edit Langagues", either create a new or edit an existing language</li>
<li>In the field "Sentence Translator URI", replace it by the URL of you libre translate instance.
<ul>
<li>Do not forget to add the parameter <code>lwt_translator=libretranslate</code> for the automatic translation!</li>
<li>
<code>source=</code> should be followed by two letters indicating the language translating from.</li>
<li>
<code>target=</code> should be followed by two letters indicating the language to translate to.</li>
</ul>
</li>
</ol>
<h3>Enhanced Text-to-Speech</h3>
<p>The Text-to-Speech may sound robotic with some languages or operating systems. A
workaround is to download a Text-To-Speech (TTS) plugin such as <a href="https://readaloud.app/">Read Aloud</a>.</p>
<h2 id="features" name="features">▶ Features - <a href="#">[↑]</a></h2>
<ul>
<li>You define languages you want to learn.</li>
<li>You define the web dictionaries you want to use.</li>
<li>You define how sentences and words in the language will be split up.</li>
<li>You upload texts, and they are automatically split into sentences and words! Later re-parsing is possible.</li>
<li>Optional: Assign the URL of an mp3 audio file of the text (Dropbox, local server, ...) in order to listen while reading the text.</li>
<li>You read the text while listening to the audio, and you see immediately the status of every word (unknown, learning, learned, well-known, ignored).</li>
<li>You click on words, and you use the external dictionaries to find out their meanings.</li>
<li>You save words or expressions (2..9 words) with optional romanization (for asiatic languages), translations and example sentence, you change its status, you edit them whenever needed (like in LingQ).</li>
<li>You test your understanding of words and expressions within or without sentence context.</li>
<li>MCD (Massive-Context Cloze Deletion) testing, as proposed by Khatzumoto @ AJATT, built-in!</li>
<li>See your progress on the statistics page.</li>
<li>You may export the words and expressions and use them in Anki or other programs.</li>
<li>You may upload words and expressions into LWT (from LingQ or other sources, CSV/TSV) - they are immediately available in all texts!</li>
<li>
<strong>New since Version 1.5.0:</strong> Create and edit an improved annotated text version (a <a href="http://learnanylanguage.wikia.com/wiki/Hyperliteral_translations">hyperliteral translation</a> as <a href="http://en.wikipedia.org/wiki/Interlinear_gloss">interlinear text</a>) for online or offline learning. Read more <a href="info.html#il">here</a>.</li>
</ul>
<hr>
<ul>
<li>The application is 100 % free, open source, and in the Public Domain. Do with it what you like!</li>
<li>Prerequisites: a local webserver (Apache, PHP, MySQL/MariaDB), e.g. EasyPHP or XAMPP (Windows), MAMP (macOS), or a LAMP server (Linux).</li>
<li>Enjoy your language learning!</li>
</ul>
<h2 id="newfeatures" name="newfeatures">▶ New feature not available in the official LWT - <a href="#">[↑]</a></h2>
<h3>User Interface</h3>
<ul>
<li>Mobile support, responsive design</li>
<li>Support for different themes</li>
<li>Display translations of terms with status in the reading frame</li>
<li>Much better interface for the main menu</li>
<li>Save text/audio position in the reading frame</li>
<li>Multiwords selection (click and hold on a word → move to another word → release mouse button)</li>
<li>Key bindings work when you hover over a word</li>
<li>Bulk translate new words in the reading frame</li>
<li>New key bindings in the reading frame:
<ul>
<li>T (translate sentence),</li>
<li>P (pronounce term),</li>
<li>G (edit term with Google Translate)</li>
</ul>
</li>
<li>Ability to change audio playback speed (doesn't work when using the flash plugin)</li>
<li>Improved HTML organization. It has several effect:
<ul>
<li>You can read texts in "reader mode" in most browsers</li>
<li>Simple mobile compatibility</li>
</ul>
</li>
</ul>
<h3>More than LWT</h3>
<ul>
<li>Automatically translate terms with LibreTranslate</li>
<li>Automatic text to speech</li>
<li>Automatic spelling for Japanese with MeCab</li>
<li>Automatically import texts from RSS feeds (for more info see: <a href="info.html#Newsfeed%20Import">Newsfeed Import</a>)</li>
<li>Longer (> 9 characters) expressions can now be saved (up to 250 characters)</li>
<li>Improved Search/Query for Words/Texts</li>
<li>Selecting terms according to a text tag</li>
<li>Term import with more options (i.e.: combine translations, multiple tag import,...)</li>
<li>Two database backup modes (new or old structure)</li>
</ul>
<h3>Back-end</h3>
<ul>
<li>Native support for Docker</li>
<li>Database improvements: the database takes much less space on the server</li>
<li>Better caching due to an improved file management</li>
<li>Enhanced security and robustness due do sanitazed SQL inputs</li>
</ul>
<h2 name="screencasts" id="screencasts">
▶ Screencasts/Videos - <a href="#">[↑]</a>
</h2>
<p>
<a target="_blank" href="https://www.youtube.com/watch?v=QSLPOATWAU4">Learning With Texts</a>
by <a target="_blank" href="https://www.youtube.com/@AnthonyLauder">Anthony Lauder (FluentCzech)</a>:
<br /><br />
<iframe width="640" height="360" src="https://www.youtube.com/embed/QSLPOATWAU4" frameborder="0" allowfullscreen></iframe>
<br /><br />
</p>
<p>
<a target="_blank" href="https://www.youtube.com/watch?v=QnGG-_urLKk">
Learning With Texts: iPad, computer & mobile FREE language reading interface
</a> from <a target="_blank" href="https://www.youtube.com/@irishpolyglot">Benny the Irish polyglot</a>:
<br /><br />
<iframe width="640" height="360" src="https://www.youtube.com/embed/QnGG-_urLKk" frameborder="0" allowfullscreen></iframe>
<br /><br />
<a href="http://www.fluentin3months.com/learning-with-texts/" target="_blank">Fluent In 3 Months: Introducing LWT</a>.<br />
</p>
<h2 id="links" name="links">▶ Important Links - <a href="#">[↑]</a></h2>
<ul>
<li>
<a href="http://sourceforge.net/projects/learning-with-texts/"><strong>Original Project Page</strong> @ Sourceforge</a>
</li>
<li>
<strong>Download Page</strong>:
<ul>
<li>
<a href="https://github.com/HugoFara/lwt/releases/latest">Lastest release @ GitHub</a>
</li>
<li>
<a href="https://github.com/HugoFara/lwt/archive/refs/heads/master.zip">Lastest pushed @ GitHub</a>
</li>
<li>
<a href="http://sourceforge.net/projects/learning-with-texts/files/">Official version @ Sourceforge</a>
</li>
</ul>
</li>
<li>
<a href="https://github.com/HugoFara/lwt"><strong>Community Maintained Version</strong> @ GitHub</a>
</li>
<li>
<strong>Documentation</strong>: try either the <a href="index.html">local link</a> or the <a href="https://hugofara.github.io/lwt/index.html">absolute link</a>.</li>
</ul>
<h3>LWT Online Demo - try it out:</h3>
<ul>
<li>
<strong>General Hints:</strong>
<ul>
<li>Do not use for productive work!!</li>
<li>Your data may be deleted at any time by other users!!</li>
<li>Only one LWT table set is available - the multiple table set feature has been deactivated.</li>
<li>You may "reset" the demo by going to "Backup/Restore", and by clicking on "Install LWT Demo Database".</li>
</ul>
</li>
<li>
<a href="https://learning-with-texts.sourceforge.io/testdb/index.php"><strong>START ONLINE DEMO</strong></a>
</li>
</ul>
<h3>LWT Reviews and Blog Posts</h3>
<ul>
<li>
<a href="https://www.mezzoguild.com/how-to-install-learning-with-texts-lwt/">The Mezzofanti Guild: How To Install Learning With Texts On Your Own Computer</a>
</li>
<li>Street-Smart Language Learning™: Using Learning with Texts with Anki 2 (in five parts):<br>
Part <a href="http://www.streetsmartlanguagelearning.com/2012/12/using-learning-with-texts-with-anki-2.html">1</a> / <a href="http://www.streetsmartlanguagelearning.com/2013/01/using-learning-with-texts-with-anki-2.html">2</a> / <a href="http://www.streetsmartlanguagelearning.com/2013/01/using-learning-with-texts-with-anki-2_8.html">3</a> / <a href="http://www.streetsmartlanguagelearning.com/2013/01/using-learning-with-texts-with-anki-2_15.html">4</a> / <a href="http://www.streetsmartlanguagelearning.com/2013/01/using-learning-with-texts-with-anki-2_21.html">5</a>
</li>
<li>
<a href="https://diyclassics.com/2014/04/11/learning-with-texts-for-classical-languages/">Learning with Texts for classical languages</a>
</li>
<li>
<a href="http://chicagoseoul.wordpress.com/2011/07/19/learning-with-texts/">Chicagoseoul's Blog: Learning with Texts</a>
</li>
<li>
<a href="https://mikotoneko.wordpress.com/2012/03/09/lwtp1/">Mikoto's Adventures in Japanese: LWT - Learning With Text Introduction</a>
</li>
<li>
<a href="https://mikotoneko.wordpress.com/2012/03/13/lwt-a-guide-to-setting-up-for-japanese-learning/">Mikoto's Adventures in Japanese: LWT - A Guide to Setting up for Japanese Learning</a>
</li>
<li>
<a href="https://mikotoneko.wordpress.com/2012/04/06/lwt-tricks-of-the-trade/">Mikoto's Adventures in Japanese: LWT - Tricks of the Trade</a>
</li>
<li>
<a href="https://mikotoneko.wordpress.com/2012/04/17/lwt-daniels-guide-for-japanese-useage/">Mikoto's Adventures in Japanese: LWT - Daniel’s Guide for Japanese Usage</a>
</li>
<li>
<a href="https://www.youtube.com/watch?v=QSLPOATWAU4">Video about Learning With Texts from Language Vlogger FluentCzech</a>
</li>
<li>
<a href="http://www.fluentin3months.com/learning-with-texts/">Fluent In 3 Months: Introducing LWT</a>
</li>
</ul>
<h3>LWT Forum Threads</h3>
<ul>
<li>
<a href="http://how-to-learn-any-language.com/forum/forum_posts.asp?TID=28312&PN=1&TPN=1">How-To-Learn-Any-Language Forum Thread about LWT</a>
</li>
<li>
<a href="https://forum.language-learners.org/viewtopic.php?f=19&t=1993">Sites/Apps like Readlang, Lingq, Lingua.ly, etc.</a>
</li>
<li>
<a href="https://forum.language-learners.org/viewtopic.php?f=19&t=5648">Best dictionaries for use with LWT?</a>
</li>
<li>
<a href="https://forum.language-learners.org/viewtopic.php?f=19&t=7156">Getting the most out of LWT</a>
</li>
</ul>
<h3>Additional Resources</h3>
<p>Similar software or services:</p>
<ul>
<li>
<a href="https://sourceforge.net/projects/foreign-language-text-reader/">FLTR - Foreign Language Text Reader</a> (Open Source Java Desktop Application).</li>
<li>
<a href="http://lingq.com">LingQ.com</a> (Web based service with tutoring. An account costs US$ 10 per month).</li>
<li>
<a href="http://lingro.com/">lingro.com</a> (An on-line environment that allows anyone learning a language to quickly look up and learn the vocabulary).</li>
<li>
<a href="http://readlang.com/">readlang.com</a> (An on-line service where you can import articles, read and translate them, and learn new words. Price: US$ 5 per month or US$ 48 per year).</li>
</ul>
<p>Resources for various languages</p>
<ul>
<li>
<p><a href="http://tinyurl.com/cbpndlt">GoogleDocs Spreadsheet</a> with recommendations for LWT Language Settings ("Templates")<br>
<strong>Important:</strong> Please be careful when making additions or corrections!</p>
</li>
<li>
<p>Japanese: <a href="http://taku910.github.io/mecab/">MeCab - Yet Another Part-of-Speech and Morphological Analyzer</a></p>
</li>
<li>
<p>Chinese: <a href="https://github.com/fxsjy/jieba">"Jieba" Chinese text segmentation</a> (<a href="https://www.python.org/">Python</a> needed). Usage: Download, unzip, run: <em>python -m jieba -d ' ' input.txt >output.txt</em></p>
</li>
</ul>
<h2 id="restrictions" name="restrictions">▶ Restrictions - <a href="#">[↑]</a></h2>
<p>Texts and vocabulary terms with Unicode characters outside the <a href="https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_Multilingual_Plane">Basic Multilingual Plane</a> (BMP; U+0000 to U+FFFF), i.e. with Unicode characters U+10000 and higher, are not supported. Therefore, characters for almost all modern languages, and a large number of symbols, are supported; but historic scripts, certain symbols and notations, and Emojis are not supported.</p>
<h2 id="UNLICENSE" name="UNLICENSE">▶ License - <a href="#">[↑]</a></h2>
<p>This is free and unencumbered software
released into the PUBLIC DOMAIN.</p>
<p>Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a
compiled binary, for any purpose, commercial or non-commercial,
and by any means.</p>
<p>In jurisdictions that recognize copyright laws, the author or
authors of this software dedicate any and all copyright
interest in the software to the public domain. We make this
dedication for the benefit of the public at large and to the
detriment of our heirs and successors. We intend this
dedication to be an overt act of relinquishment in perpetuity
of all present and future rights to this software under
copyright law.</p>
<p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE
FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.</p>
<p>For more information, please refer to [http://unlicense.org/].</p>
<h2 id="thirdpartylicenses" name="thirdpartylicenses">▶ Third Party Licenses - <a href="#">[↑]</a></h2>
<p>The following software packages, bundled within the LWT software, have different licenses:</p>
<ul>
<li>jQuery, jQueryUI - Copyright © John Resig et.al., <a href="http://jquery.org/license">http://jquery.org/license</a> (../js/jquery.js, ../js/jquery-ui.min.js)</li>
<li>jQuery.ScrollTo - Copyright © Ariel Flesler, <a href="http://flesler.blogspot.com">http://flesler.blogspot.com</a> (../js/jquery.scrollTo.min.js)</li>
<li>Jeditable - jQuery in-place edit plugin - Copyright © Mika Tuupola, Dylan Verheul, <a href="http://www.appelsiini.net/projects/jeditable">http://www.appelsiini.net/projects/jeditable</a> (../js/jquery.jeditable.mini.js)</li>
<li>jQueryUI Tag-it! - Copyright © Levy Carneiro Jr., <a href="http://aehlke.github.com/tag-it/">http://aehlke.github.com/tag-it/</a> (../js/tag-it.js)</li>
<li>overLIB 4.22 - Copyright © Erik Bosrup, <a href="http://www.bosrup.com/">http://www.bosrup.com/</a> (../js/overlib/...)</li>
<li>sorttable - Copyright © Stuart Langridge, <a href="http://www.kryogenix.org/code/browser/sorttable/">http://www.kryogenix.org/code/browser/sorttable/</a> (../js/sorttable/...)</li>
<li>CountUp - Copyright © Praveen Lobo, <a href="http://PraveenLobo.com/techblog/javascript-countup-timer/">http://PraveenLobo.com/techblog/javascript-countup-timer/</a> (../js/third_party/countuptimer.js)</li>
<li>jPlayer - Copyright © Happyworm Ltd, <a href="http://www.jplayer.org/about/">http://www.jplayer.org/about/</a> (../js/jquery.jplayer.js, ../js/Jplayer.swf)</li>
<li>mobiledetect - Copyright © Șerban Ghiță & Victor Stanciu, <a href="http://mobiledetect.net/">http://mobiledetect.net</a> (vendor/mobiledetect/mobiledetectlib/Mobile_Detect.php)</li>
<li>iUI - Copyright © iUI, <a href="http://www.iui-js.org/">http://www.iui-js.org/</a> (iui)</li>
<li>Query.Xpath - Copyright © Sergey Ilinsky, <a href="https://github.com/ilinsky/jquery-xpath">https://github.com/ilinsky/jquery-xpath</a> (../js/jquery.xpath.js)</li>
<li>hoverIntent - Copyright © Brian Cherne, <a href="https://briancherne.github.io/jquery-hoverIntent/">https://briancherne.github.io/jquery-hoverIntent/</a> (../js/jquery.hoverIntent.js)</li>
</ul>
<p>The icons in the "icn" subdirectory are Copyright © <a href="http://p.yusukekamiyamane.com/">Yusuke Kamiyamane</a>. All rights reserved. Licensed under a <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0 license</a>. The wizard icon "wizard.png" is the "Free Wizard Icon", free for commercial use, from <a href="http://www.icojam.com/blog/?p=159">icojam.com</a> (Author: <a href="http://www.icojam.com">IcoJam / Andrew Zhebrakov</a>).</p>
<p>The following examples, supplied within the LWT download package, have the following licenses:</p>
<ul>
<li>Chinese: The Man and the Dog - Copyright © Praxis Language LLC, now ChinesePod Ltd., <a href="http://chinesepod.com/lessons/the-man-and-the-dog">Source</a>, MP3 licensed under a <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons 3.0 Unported license</a>.</li>
<li>German: Die Leiden des jungen Werther by Johann Wolfgang von Goethe - in the <a href="http://www.gutenberg.org/wiki/Gutenberg:The_Project_Gutenberg_License">Public Domain</a>, Source: <a href="http://www.gutenberg.org/ebooks/2407">Text</a>, <a href="http://www.gutenberg.org/ebooks/19794">Audio</a>.</li>
<li>French: Mon premier don du sang - Copyright © France Bienvenue, <a href="http://francebienvenue1.wordpress.com/2011/06/18/generosite/">Source</a>. License: "Bien sûr, les enseignants de FLE peuvent utiliser nos enregistrements et nos transcriptions pour leurs cours. Merci de mentionner notre site !".</li>
<li>Korean, Japanese, Thai, Hebrew - own creations from different sources.</li>
</ul>
<h2 id="learn" name="learn">▶ How to Learn - <a href="#">[↑]</a></h2>
<p>First, find a text you want to study, preferably with an audio file, and load it into LWT.
The <a href="http://lingq.com">LingQ Library</a> has many texts with audio, and only a free registration is needed.
Or look into <a href="https://forum.lingq.com/t/where-to-find-good-content-to-import/2563">Where to find good content to import (LingQ forum)</a>
in the LingQ Forum, you will find there lots of great links to resources.
Or click (within the LingQ library) on "My Imports" - you will find a list of links
of "Suggested resources".</p>
<p>Read the text, look up the new words and expressions (=terms) and save them for review and test.
The good thing with LWT: Every saved term will show up with its translation,
status, etc. in all other occurrences of the same text and every other text!
So you'll see immediately what you already know and how well you know it.
And of course you'll see what you don't know!</p>
<p>Train: load the MP3 file also on your portable MP3 player and listen to it often.
Review (by reading again) or test your saved words and expressions.</p>
<p>In short:</p>
<ul>
<li>Listen ▶ Read ▶ Review/Test.</li>
<li>Listen ▶ Read ▶ Review/Test.</li>
<li>......</li>
</ul>
<p>That's it. It's that simple. You can also watch
<a href="https://www.youtube.com/@Thelinguist">Steve Kaufmann's videos on YouTube</a>:
"The 7 secrets of language learning", "Language learning FAQ", and many more to learn more eficiently.</p>
<h2 id="howto" name="howto">▶ How to Use - <a href="#">[↑]</a></h2>
<h3>Home Screen</h3>
<p>LWT home screen after installation:</p>
<p><img src="../img/23.jpg" alt="Image"></p>
<p>This is home screen of LWT if the database is empty. Please install the demo database or start with the definition of a language you want to learn.</p>
<p>LWT home screen</p>
<p><img src="../img/lwt_home_screen.jpg" alt="Image"></p>
<p>This is normal home screen of LWT. You may choose a language here, but you can do this also later. If you you choose a language, the language filter is pre-set to that language in some other screens. The last text you've read or tested is shown, and you may jump directly into reading, testing or printing of this last text.</p>
<h3>Languages</h3>
<p>The list of languages. Here you can add a new or edit an existent language. If no texts and no saved terms in a language exist, you can delete a language. If you change a language, all texts may be automatically reparsed to refresh (and correct) the cache of sentences and text items (depends on what language settings you have changed). You can do this also manually by clicking on the yellow flash icon. You can also test all (due) terms of a language or set a language as "current" language.</p>
<p><img src="../img/02.jpg" alt="Image"></p>
<h4>New/Edit Language</h4>
<p>This is the place to define or edit a language you want to study.</p>
<p>It is recommended to use the "Language Settings Wizard" first. You only select your
native (L1) and study (L2) languages, and let the wizard set all language settings
that are marked in yellow. You can always adjust the settings afterwards.</p>
<p><strong>Explanations of the input fields</strong> - please read also <a href="info.html#langsetup">this section</a>:</p>
<p>The three <a href="https://en.wikipedia.org/wiki/URL">URLs</a> are URLs to three web dictionaries (the second and third is optional). Use <code>lwt_term</code> as a placeholder for the search word in the URIs. If <code>lwt_term</code> is missing, the search word will be appended to the end. If the URI to query "travailler" in WordReference is "<a href="http://www.wordreference.com/fren/travailler">http://www.wordreference.com/fren/travailler</a>", you may enter: "http://www.wordreference.com/fren/lwt_term" or "<a href="http://www.wordreference.com/fren/">http://www.wordreference.com/fren/</a>". Another example: The URI to query "travailler" in sensagent is "<a href="http://dictionary.sensagent.com/travailler/fr-en/">http://dictionary.sensagent.com/travailler/fr-en/</a>", so you enter in LWT "http://dictionary.sensagent.com/lwt_term/fr-en/".</p>
<p>As URI No. 3 ("Translator") is also used to translate whole sentences. It is recommended to use either <a href="https://translate.google.com">Google Translate</a> or <a href="https://libretranslate.com/">LibreTranslate</a>.</p>
<ul>
<li>Generic URL for Google Translate: "http://translate.google.com/?ie=UTF-8&sl=..&tl=..&text=lwt_term", where the two-character codes after "sl=" and "tl=" designate the <a href="http://www.iana.org/assignments/language-subtag-registry">language codes (or "subtags")</a> for the source and the target language.</li>
<li>Generic URL for LibreTranslate: "http://localhost:5000/?lwt_translator=libretranslate&source=..&target=..&q=lwt_term".
<ul>
<li>Use "source=" and "target=" to set languages.</li>
<li>It is <strong>required</strong> to set "lwt_translator=libretranslate" if you want to use automatic translation features.</li>
</ul>
</li>
</ul>
<p>A different third web dictionary is of course possible, but sentence translations may not work.</p>
<p><strong>IMPORTANT:</strong> Some dictionaries (including "Google Translate") don't allow to be opened within a frame set. Put an asterisk * in front of the URI (Examples: *<a href="http://mywebdict.com?q=###">http://mywebdict.com?q=###</a> or *<a href="http://translate.google.com/?ie=UTF-8&sl=..&tl=..&text=###)">http://translate.google.com/?ie=UTF-8&sl=..&tl=..&text=###)</a> to open such a dictionary not within the frame set but in a popup window (please don't forget to deactivate popup window blocking in your browser!).</p>
<h5>Deprecated Features</h5>
<h6>Specify Encoding</h6>
<p><strong>This feature has been abandonned, do not use it</strong>!</p>
<p>If the searchword in the three URIs needs to be converted into a different encoding (standard is UTF-8), you could use ###encoding### as a placeholder. Normally you see this right away if terms show up wrongly in the web dictionary. Example: Linguee expects the searchword in ISO-8859-15, not in UTF-8, so you define it this way: "http://www.linguee.de/search?direction=auto&query=###ISO-8859-15###". A list of encodings can be found <a href="http://php.net/manual/en/mbstring.supported-encodings.php">here</a>.</p>
<h6>Glosbe API</h6>
<p>Glosbe closed there API, this feature does no longer work.</p>
<p>One dictionary (<a href="http://glosbe.com/">Glosbe</a>) has been closely integrated into LWT via the Glosbe API. To use this dictionary, input the "special" dictionary link "http://localhost/lwt/glosbe_api.php?from=...&dest=...&phrase=lwt_term" with <em>from</em>: "L2 language code" (the language of your texts) and <em>dest</em>: "L1 language code" (e.g. mother tongue). To find the language codes, open <a href="http://glosbe.com/all-languages">this page</a> to select the "from" (L2) language. On the next page, select the "L2 - L1" language pair. The URL of the next page shows the two language codes, here as an example "French - English": http://glosbe.com/<strong>fr</strong>/<strong>en</strong>/. The "from" code is "fr", the "dest" code is "en". Using this dictionary makes the transfer of translation(s) from the Glosbe to LWT very easy: just click on the icon next to the translations to copy them into the LWT edit screen. I recommend to use the LWT-integrated Glosbe dictionary as the "Dictionary 1 URI". Note: I cannot guarantee that the Glosbe API and this special integration will work in the future! glosbe_api.php is just an example how one can integrate a dictionary into LWT.</p>
<p>You don't know how and where to find a good web dictionary? Try these dictionary directories:</p>
<ul>
<li>
<a href="http://www.alphadictionary.com/langdir.html">http://www.alphadictionary.com/langdir.html</a>
</li>
<li>
<a href="http://dir.yahoo.com/reference/dictionaries/">http://dir.yahoo.com/reference/dictionaries/</a>
</li>
<li>
<a href="http://www.dmoz.org/Reference/Dictionaries/">http://www.dmoz.org/Reference/Dictionaries/</a>
</li>
<li>
<a href="http://www.lexicool.com/">http://www.lexicool.com/</a>
</li>
</ul>
<p>If you have found a suitable web dictionary, try to translate some words and look whether the word is part of the web address (URI/URL). If yes, replace the word with ### and put this in one of the URI fields within LWT.</p>
<p>The entry "Text Size" defines the relative font size of the text. This is great for Chinese, etc.</p>
<p>"Character Substitutions" is an optional list of "from=to" items with "|" as list separator. The "from" character is replaced by the "to" character ("to" may be also empty). So different kinds of apostrophes can unified or deleted.</p>
<p>"RegExp Split Sentences" is a list of characters that signify a sentence ending (ALWAYS together with a following space or newline!). The space can be omitted (and it is normally), if you set "Make each character a word" to Yes (see below). Whether you include here ":" and ";" - that's your decision. See also <a href="info.html#langsetup">this table</a>. Characters can be also defined in <a href="http://en.wikipedia.org/wiki/Unicode">Unicode</a> form: "\x{....}"; the Chinese/Japanese full stop "。" is then "\x{3002}" (always without "). Please inform yourself about Unicode <a href="http://en.wikipedia.org/wiki/Unicode">here (general information)</a> and <a href="http://unicode.coeurlumiere.com/">here (Table of Unicode characters)</a>.</p>
<p>"Exceptions Split Sentences" are a list of exceptions that are NOT to be treated as sentence endings with "|" as list separator. [A-Z] is a character range. If you don't want to split sentences after Mr. / Dr. / A. to Z. / Vd. / Vds. / U.S.A., then you should specify these here: "Mr.|Dr.|[A-Z].|Vd.|Vds.|U.S.A." (without ").</p>
<p>"RegExp Word Characters" is a list of characters OR character ranges "x-y" that defines all characters in a word, e.g. English: "a-zA-Z", German: "a-zA-ZaöüÄÖÜß", Chinese: 一-龥. See also <a href="info.html#langsetup">this table</a>. Characters can be also defined in <a href="http://en.wikipedia.org/wiki/Unicode">Unicode</a> form: "\x{....}"; the Chinese/Japanese character "one" "一" is then "\x{4E00}" (always without "). So the above specification for the range of characters in Chinese "一-龥" can also be specified: "\x{4E00}-\x{9FA5}".</p>
<ul>
<li>The value "mecab" is special as it will use MeCab to process japanese. You can ignore subsequent fields.</li>
</ul>
<p>"Make each character a word" is a special option for Chinese, etc. This makes EVERY character a single word (normally words are split by any non-word character or a space). See also <a href="info.html#langsetup">this table</a>.</p>
<p>"Remove spaces" is another option for Chinese, etc. It removes all spaces from the text (and the example sentences). See also <a href="info.html#langsetup">this table</a>.</p>
<p>"Right-To-Left Script" must be set to "Yes" if the language/script is written from right to left, like Arabic, Hebrew, Farsi, Urdu, etc.</p>
<p>"Export Template". The export template controls "Flexible" Term Exports for the terms of that language. It consists of a string of characters. Some parts of this string are placeholders that are replaced by the actual term data, <a href="export_template.html">see this table</a>. For each term (word or expression), that has been selected for export, the placeholders of the export template will be replaced by the term data and the string will be written to the export file. If the export template is empty, nothing will be exported.</p>
<p>To understand all these options, please study also <a href="info.html#langsetup">this</a>, look at the examples and play around with different settings and different texts.</p>
<p><img src="../img/language_edition.jpg" alt="Image"></p>
<h3>Texts</h3>
<p>The list of texts. You can filter this list according to language, title (wildcard = *) or text tag(s) (see also below). The most important links for each text are "Read" and "Test" - that's the place to read, to listen, to save terms and to review and test your terms in sentence context. To see all terms of a text that you have saved, click on the numbers in column "Saved Wo+Ex". To print, archive, edit (and reparse), or to delete a text, click on the icons in column "Actions". There are more actions available, see "Multi Actions".</p>
<p><img src="../img/04.jpg" alt="Image"></p>
<h4>Multi Actions for marked texts</h4>
<p>You can test the terms of the marked texts, delete or archive the marked texts. "Reparse Texts" rebuilds the sentence and the text item cache for all marked texts. "Set Term Sentences" sets a valid sentence (with the term in {..}) for all those saved or imported terms that occur in the text and that do not have a sentence at all or none with {term}. This makes it easy to "create" sentence examples for imported terms.</p>
<p><img src="../img/14.jpg" alt="Image"></p>
<h3>Text Tags</h3>
<p>The list of your text tags. You can manage your text tags here. With text tags, it will be easier to categorize and organize your texts. The tags are case sensitive, have 1 to 20 characters, and must not contain any spaces or commas.</p>
<p><img src="../img/25.jpg" alt="Image"></p>
<h4>New/Edit Text</h4>
<p>This is the screen to input, check or edit a single text. Try to store not too long texts (the maximum length is 65,000 Bytes). If texts are very long (> 1000 words), certain operations (e.g. loading a text for reading, calculation of known/unknown words) may be quite slow. An audio URI and a link to the text source can also be defined. The best place to store your audios is the "media" subdirectory below the installation directory "lwt" (you have to create it yourself, and you have to copy the audio files into this directory; click Refresh if you don't see just copied media). But a cloud webspace service like DropBox is also possible. In the moment there is no possibility to import/upload an audio file within the LWT application. By the way, you can use MP3, WAV, or OGG media files, but be aware that not all browsers and/or operating systems support all media types!</p>
<p>If you click "Check", the text will be parsed and split into sentences and words according to your language settings. Nothing will be stored if you check a text. You can see whether your text needs some editing, or whether your language settings (especially the ones that influence parsing/splitting) need an adjustment. Words (not expressions) that are already in your word list are displayed in red, and the translation is displayed. The Non-Word List shows all stuff between words. The "Check a Text" function can also be started directly from the main menu. If you click on "Change" or "Save", the text will be only saved. If you click on "Change and Open" or "Save and Open", the text will be saved and opened right away.</p>
<p><img src="../img/05.jpg" alt="Image"></p>
<p>You can also import a longer text into LWT with the possibility to split it up into several smaller texts. Click on "Long Text Import". You must specify the maximum number of sentences per text, and the handling of newlines for paragraph detection. It is not possible to specify audio files or URIs.</p>
<p><img src="../img/33.jpg" alt="Image"></p>
<h3>Newsfeed</h3>
<h4>Newsfeed Import</h4>
<p>Here you can download the articles of your newsfeeds (see the section New/Edit Feeds
for an explanation on how To add a new newsfeed).
If you've set up multiple newsfeeds for your selected language, the link
"update multiple feeds" will appear. By clicking that link you can update one or
more feeds at once.
If you've selected a newsfeed, a blue circle-arrow will appear as well as the date
of your last update.
A click on the circle-arrow will update your selected newsfeed.
All downloaded articles will be marked by a bookmark-icon instead of the checkbox,
so you can access them immediately. If a downloaded article is archived,
a red mark will appear. An error may occur, when you try to download an article and
the link or the text-section of the article is not found.
Then a yellow warning sign appears, which can be removed temporarily by clicking on
it or permanently in "Manage Feeds" (see next section).
If you hover over an article title, a description of the article will be shown.
You can open the article and, if available, the audio in a new window.</p>
<p><img src="../img/37.jpg" alt="Image"></p>
<h4>Manage Feeds</h4>
<p>Multi Actions for marked newsfeeds: You can update feeds, unset unloadable articles
(see <a href="info.html#Newsfeed%20Import">Newsfeed Import</a>), delete all articles or delete feeds.<br>
Actions: You can edit, update, delete a feed or follow the link to the newsfeed.</p>
<p><img src="../img/38.jpg" alt="Image"></p>
<h4>New/Edit Feeds</h4>
<p>Explanations of the input fields</p>
<ul>
<li>Language: select your language, it can be changed later.</li>
<li>Name: the name is limited to 40 characters, this field must not be empty.</li>
<li>Newsfeed url: URL of your RSS/Atom-Feed, this field must not be empty.</li>
<li>Article Section: <a href="http://www.w3.org/TR/xpath20/">xpath expression</a> (i.e.: //div[@id="content-to-read"]/p), the <a href="info.html#feed_wizard">feed wizard</a> can be used to get the right sections, this field must not be empty.</li>
<li>Filter Tags: <a href="http://www.w3.org/TR/xpath20/">xpath expression</a>, the <a href="info.html#feed_wizard">feed wizard</a> removes sections to include in the text.</li>
<li>Options: