-
Notifications
You must be signed in to change notification settings - Fork 48
/
219.srt
4909 lines (3608 loc) · 108 KB
/
219.srt
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
WEBVTT
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
00:00:10.066 --> 00:00:11.306 A:middle
>> Alright, good
morning everyone.
00:00:12.116 --> 00:00:13.926 A:middle
I'm Doug Davidson, and
I'm here to talk to you
00:00:13.926 --> 00:00:15.646 A:middle
about making your
app world ready.
00:00:18.236 --> 00:00:20.816 A:middle
So, the app store
is available in more
00:00:20.816 --> 00:00:23.026 A:middle
than 150 countries worldwide,
00:00:23.486 --> 00:00:26.906 A:middle
and if your application is
only targeted at one of them;
00:00:27.196 --> 00:00:29.566 A:middle
not only are you missing
out, but also a lot
00:00:29.566 --> 00:00:31.936 A:middle
of your potential users
are being deprived as well.
00:00:32.366 --> 00:00:36.566 A:middle
So, we're going to tell you how
with a little additional effort,
00:00:37.066 --> 00:00:39.236 A:middle
you can make your app ready
for international use.
00:00:40.106 --> 00:00:42.556 A:middle
The steps to go through
are fairly simple.
00:00:42.696 --> 00:00:45.476 A:middle
In many cases, we find
that what you have to watch
00:00:45.476 --> 00:00:48.416 A:middle
out for is assumptions
that you may be making;
00:00:48.526 --> 00:00:49.836 A:middle
maybe even unconsciously,
00:00:50.186 --> 00:00:52.406 A:middle
that just don't hold
everywhere in the world.
00:00:53.086 --> 00:00:55.466 A:middle
And, so we'll be
talking a lot about that.
00:00:55.506 --> 00:00:58.186 A:middle
Often, it's not things you don't
know that will hurt so much,
00:00:58.186 --> 00:01:00.266 A:middle
as the things you do
know that just aren't so.
WEBVTT
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
00:00:58.186 --> 00:01:00.266 A:middle
as the things you do
know that just aren't so.
00:01:02.146 --> 00:01:05.476 A:middle
Now, there are some
genuine challenges here.
00:01:05.476 --> 00:01:09.706 A:middle
Our customers around the world
use many different languages,
00:01:09.756 --> 00:01:11.276 A:middle
many different writing systems,
00:01:11.696 --> 00:01:13.866 A:middle
and they have often
significantly different
00:01:13.866 --> 00:01:18.246 A:middle
expectations after the
presentation of items like dates
00:01:18.246 --> 00:01:19.616 A:middle
and times and numbers.
00:01:20.046 --> 00:01:23.916 A:middle
But, fortunately, the frameworks
are designed to handle this,
00:01:23.916 --> 00:01:24.756 A:middle
if you work with them.
00:01:25.396 --> 00:01:28.216 A:middle
Now, I say frameworks,
it's important to note
00:01:28.476 --> 00:01:30.366 A:middle
that almost everything
we're going talk
00:01:30.366 --> 00:01:34.226 A:middle
about here today applies
to both iOS and OS X.
00:01:34.226 --> 00:01:37.546 A:middle
Now, we're going to do
this in three parts.
00:01:37.826 --> 00:01:39.596 A:middle
The first is about localization.
00:01:40.006 --> 00:01:42.996 A:middle
Localization refers
to the language
00:01:43.446 --> 00:01:45.906 A:middle
in which you application's
user interface is presented.
00:01:47.116 --> 00:01:50.266 A:middle
Your job as a developer
is to make sure
00:01:50.266 --> 00:01:53.566 A:middle
that your application is
localizable, so that you can go
00:01:53.566 --> 00:01:56.776 A:middle
to the localizer, who
will translate the text
00:01:56.776 --> 00:01:59.786 A:middle
in your user interface into
any particular language,
WEBVTT
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
00:02:00.326 --> 00:02:03.526 A:middle
then all you have to do is
decide how many languages you
00:02:03.526 --> 00:02:04.406 A:middle
want to do this for.
00:02:05.536 --> 00:02:08.716 A:middle
Second, we'll talk about
locale data, and that refers
00:02:08.716 --> 00:02:11.856 A:middle
to presenting things like
dates and times and numbers
00:02:11.856 --> 00:02:13.646 A:middle
in a way that's intelligible
to people
00:02:13.646 --> 00:02:15.066 A:middle
in that particular region.
00:02:16.026 --> 00:02:18.366 A:middle
And, finally, we'll talk
about handling texts
00:02:18.446 --> 00:02:20.956 A:middle
and all the different writing
systems used around the world.
00:02:20.956 --> 00:02:26.336 A:middle
There are two main settings
that are involved here,
00:02:26.536 --> 00:02:28.506 A:middle
and this is what they
look like on iOS.
00:02:29.106 --> 00:02:31.796 A:middle
The first is the user's
language preference,
00:02:31.936 --> 00:02:33.016 A:middle
and that's what determines
00:02:33.016 --> 00:02:35.546 A:middle
which localization
your app will run in,
00:02:36.616 --> 00:02:39.696 A:middle
and the second is the
user's region preference,
00:02:40.166 --> 00:02:43.966 A:middle
which determines what their
locale settings will be.
00:02:44.516 --> 00:02:49.806 A:middle
On OS X Mavericks, we have
an entirely new pref pane
00:02:49.856 --> 00:02:50.866 A:middle
for handling this.
00:02:50.866 --> 00:02:52.766 A:middle
It's designed to streamline it,
00:02:52.766 --> 00:02:55.336 A:middle
and make changing
the settings simple,
00:02:55.336 --> 00:02:56.556 A:middle
and make it all more logical.
00:02:56.796 --> 00:02:57.556 A:middle
It's very similar.
00:02:57.626 --> 00:03:00.136 A:middle
You have the user's
language preference again
WEBVTT
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
00:02:57.626 --> 00:03:00.136 A:middle
You have the user's
language preference again
00:03:00.136 --> 00:03:02.416 A:middle
that determines what
localizations will be used,
00:03:03.006 --> 00:03:04.376 A:middle
and the user region preference
00:03:04.486 --> 00:03:06.136 A:middle
that determines the
locale settings.
00:03:06.556 --> 00:03:10.896 A:middle
Additionally, on OS X,
there is an advanced sheet
00:03:10.956 --> 00:03:14.106 A:middle
that allows the user to
customize in great detail,
00:03:14.106 --> 00:03:17.866 A:middle
if they want to, any of the
various settings that are part
00:03:17.866 --> 00:03:19.096 A:middle
of their locale preferences.
00:03:20.126 --> 00:03:23.706 A:middle
So, to start off with, we'll
talk about localization.
00:03:23.706 --> 00:03:26.756 A:middle
I'll bring up my colleague,
Albert Lund to talk about that.
00:03:27.516 --> 00:03:31.896 A:middle
[ Applause ]
00:03:32.396 --> 00:03:34.616 A:middle
>> Hello, I'm going to be
talking about localization,
00:03:34.926 --> 00:03:36.826 A:middle
and what localization is,
00:03:36.826 --> 00:03:38.966 A:middle
is that it translates
your application
00:03:38.966 --> 00:03:41.536 A:middle
from its current language
to another language,
00:03:41.876 --> 00:03:45.296 A:middle
so your app can provide much
more exposure and visibility
00:03:45.296 --> 00:03:47.106 A:middle
to other markets
around the world,
00:03:47.106 --> 00:03:49.676 A:middle
leading to more downloads
for your app.
00:03:49.676 --> 00:03:53.526 A:middle
It's also about adapting your
application to cultural norms
00:03:53.526 --> 00:03:56.756 A:middle
in those regions, so you
can provide the same level
00:03:56.756 --> 00:04:01.056 A:middle
of user experience for
all users of your app.
WEBVTT
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
00:03:56.756 --> 00:04:01.056 A:middle
of user experience for
all users of your app.
00:04:01.696 --> 00:04:03.626 A:middle
Now, today, I'm going
to be talking about how
00:04:03.626 --> 00:04:07.026 A:middle
to use our tools and X codes
to localize your application,
00:04:07.426 --> 00:04:09.376 A:middle
as well as some common
mistakes and issues
00:04:09.376 --> 00:04:11.676 A:middle
that may occur when localizing.
00:04:13.186 --> 00:04:17.286 A:middle
So, here's your project is
structured for localization.
00:04:17.576 --> 00:04:21.156 A:middle
You have your single binary,
which is your header files,
00:04:21.156 --> 00:04:23.446 A:middle
your implementation files,
and libraries you call,
00:04:23.666 --> 00:04:26.006 A:middle
and you only have one
set of these files.
00:04:27.386 --> 00:04:31.486 A:middle
You also have localization
folders alongside your binary,
00:04:31.666 --> 00:04:34.236 A:middle
and these are folders
called L proj folders,
00:04:34.236 --> 00:04:36.476 A:middle
or your language
specific project folders.
00:04:37.116 --> 00:04:40.986 A:middle
Each localization is placed
into one of these folders,
00:04:40.986 --> 00:04:45.596 A:middle
and it's abbreviated
by the language.
00:04:45.596 --> 00:04:49.416 A:middle
So, for example, the English
location is EN, French is FR,
00:04:49.666 --> 00:04:51.346 A:middle
Spanish is ES and so on.
00:04:52.166 --> 00:04:54.216 A:middle
All of these localizations
are then placed
00:04:54.216 --> 00:04:55.846 A:middle
into your single app bundle,
00:04:56.196 --> 00:04:58.226 A:middle
and one of these will
get loaded at runtime.
00:04:59.056 --> 00:05:01.476 A:middle
Whichever one gets loaded
at run time is determined
WEBVTT
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
00:04:59.056 --> 00:05:01.476 A:middle
Whichever one gets loaded
at run time is determined
00:05:01.476 --> 00:05:03.916 A:middle
by what the user selected
system language is.
00:05:03.916 --> 00:05:05.706 A:middle
So, if the user's
language is Spanish,
00:05:05.706 --> 00:05:07.086 A:middle
the Spanish localization
gets loaded.
00:05:07.086 --> 00:05:10.496 A:middle
So, here's how your
project is structured.
00:05:10.496 --> 00:05:13.416 A:middle
You can see that the L proj
folders are alongside your
00:05:13.416 --> 00:05:15.906 A:middle
implication files
and your localizers
00:05:15.906 --> 00:05:18.836 A:middle
or your translators just have
to modify these folders only;
00:05:18.836 --> 00:05:20.196 A:middle
they don't need to
touch anything else.
00:05:21.496 --> 00:05:24.736 A:middle
These folders contain things
such as your strings files,
00:05:24.736 --> 00:05:27.496 A:middle
which contains things such
as your user visible text,
00:05:27.896 --> 00:05:30.486 A:middle
as well as any resource
files, such as images
00:05:30.486 --> 00:05:32.886 A:middle
and anything else you might
want to use for localization.
00:05:32.886 --> 00:05:36.776 A:middle
So, let's get started on
how to localize things
00:05:36.776 --> 00:05:39.776 A:middle
such as your interface files or
your nib files or storyboards.
00:05:40.546 --> 00:05:43.206 A:middle
The old way to do this, and
you can still do this today,
00:05:43.206 --> 00:05:46.196 A:middle
is to make a copy of
every single nib file
00:05:46.196 --> 00:05:47.956 A:middle
for every single
localization you have.
00:05:48.626 --> 00:05:50.116 A:middle
Your localizers then just open
00:05:50.116 --> 00:05:52.746 A:middle
and modify the specific
interface file
00:05:52.746 --> 00:05:55.486 A:middle
for that specific
localization, modify the text
00:05:55.486 --> 00:05:57.456 A:middle
so it's localized, and make sure
00:05:57.456 --> 00:05:59.016 A:middle
that everything surrounding
it looks good
00:05:59.016 --> 00:06:00.386 A:middle
and works for this interface.
WEBVTT
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
00:05:59.016 --> 00:06:00.386 A:middle
and works for this interface.
00:06:01.466 --> 00:06:03.166 A:middle
Like I said, while
these work today,
00:06:03.166 --> 00:06:04.326 A:middle
if you want to localize
this way,
00:06:04.326 --> 00:06:06.666 A:middle
you can see this
gets very cumbersome,
00:06:06.666 --> 00:06:10.666 A:middle
and can be very time consuming
for you and your localizers,
00:06:10.886 --> 00:06:13.076 A:middle
so we highly recommend
you use this method called
00:06:13.156 --> 00:06:14.366 A:middle
base internationalization.
00:06:15.386 --> 00:06:19.116 A:middle
With base internationalization,
you only need to modify one set
00:06:19.216 --> 00:06:21.406 A:middle
of storyboards and nib files,
so you don't have to worry
00:06:21.406 --> 00:06:23.686 A:middle
about localization when it
comes to your interface.
00:06:24.556 --> 00:06:26.906 A:middle
Every single time you
create a new localization,
00:06:27.506 --> 00:06:29.676 A:middle
a strings file, which
basically takes all
00:06:29.676 --> 00:06:34.286 A:middle
of the user visible text out of
your nib file, is then placed
00:06:34.286 --> 00:06:36.166 A:middle
into those specific
language folders,
00:06:36.546 --> 00:06:40.026 A:middle
and your localizer just has to
modify those, the text only.
00:06:40.076 --> 00:06:41.446 A:middle
They don't need to touch
your interface at all.
00:06:42.556 --> 00:06:45.446 A:middle
Now, it's highly recommended
that you should use auto layout
00:06:45.446 --> 00:06:46.846 A:middle
for base internationalization,
00:06:46.846 --> 00:06:48.896 A:middle
and I'll explain what auto
layout is in a moment.
00:06:49.406 --> 00:06:52.926 A:middle
But, here's an example how base
internationalization works.
00:06:53.026 --> 00:06:54.506 A:middle
I have my one nib file here,
00:06:54.886 --> 00:06:58.136 A:middle
and this is my base
internationalization file.
00:06:58.816 --> 00:07:01.666 A:middle
As a developer, I only need
to modify this one file,
WEBVTT
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
00:06:58.816 --> 00:07:01.666 A:middle
As a developer, I only need
to modify this one file,
00:07:02.056 --> 00:07:04.456 A:middle
and every single time I
create a new localization,
00:07:04.496 --> 00:07:06.646 A:middle
a strings file is then
generated for every single one.
00:07:07.486 --> 00:07:11.256 A:middle
From there on, my localizers
then do not touch anything
00:07:11.256 --> 00:07:12.146 A:middle
involving my interface.
00:07:12.206 --> 00:07:13.756 A:middle
They only need to
modify the strings,
00:07:13.756 --> 00:07:16.526 A:middle
and that's really convenient.
00:07:17.816 --> 00:07:19.506 A:middle
So, what's auto layout.
00:07:20.126 --> 00:07:23.826 A:middle
Auto layout is a way to define
the constraints between text
00:07:23.826 --> 00:07:26.766 A:middle
and anything surrounding your
text, such as text views,
00:07:26.766 --> 00:07:28.596 A:middle
UI image views, and
pretty much anything
00:07:28.886 --> 00:07:29.816 A:middle
that surrounds the text.
00:07:30.526 --> 00:07:33.806 A:middle
It is a way to appropriately
resize everything depending
00:07:33.806 --> 00:07:36.486 A:middle
on the length of the text, which
is crucial for localization;
00:07:37.066 --> 00:07:39.476 A:middle
the reason being is that when
you translate your application
00:07:39.476 --> 00:07:40.886 A:middle
from one language to another,
00:07:41.356 --> 00:07:44.306 A:middle
some translated strings may be
significantly longer or shorter,
00:07:44.306 --> 00:07:46.826 A:middle
and you want to be able to
dynamically adjust these,
00:07:46.826 --> 00:07:49.266 A:middle
so your interface looks good.
00:07:50.076 --> 00:07:51.906 A:middle
And, to learn more
about auto layout,
00:07:52.006 --> 00:07:54.906 A:middle
I highly recommend you check out
the video for "Taking Control
00:07:54.906 --> 00:07:56.316 A:middle
of Auto Layout in X Code 5".
00:07:56.316 --> 00:07:57.176 A:middle
That was held yesterday.
00:07:58.716 --> 00:08:02.766 A:middle
So, let's get started on how to
use base internationalization.
WEBVTT
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
00:07:58.716 --> 00:08:02.766 A:middle
So, let's get started on how to
use base internationalization.
00:08:02.966 --> 00:08:05.066 A:middle
So in my project
window for X code,
00:08:05.066 --> 00:08:08.236 A:middle
I have this checkbox here called
used space internationalization.
00:08:09.106 --> 00:08:12.836 A:middle
I check this box, and then
X code will then ask me
00:08:13.276 --> 00:08:17.096 A:middle
which files do I want to use for
my base internationalization.
00:08:17.096 --> 00:08:19.976 A:middle
It will then move all
of these interface files
00:08:19.976 --> 00:08:22.876 A:middle
and any file I want into
the base.Lproj folder,
00:08:23.336 --> 00:08:25.596 A:middle
and anytime I want to
create a new localization,
00:08:25.596 --> 00:08:27.046 A:middle
I then push this
plus button here.
00:08:28.556 --> 00:08:30.496 A:middle
Any interface files
then that are placed
00:08:30.616 --> 00:08:33.376 A:middle
in the base.Lproj folder
will then generate their own
00:08:33.376 --> 00:08:34.135 A:middle
strings files.
00:08:34.916 --> 00:08:37.596 A:middle
And, then again, my
localizer just has to go
00:08:37.596 --> 00:08:40.466 A:middle
into these strings file
only, and have nothing to do
00:08:40.466 --> 00:08:46.096 A:middle
with the interface,
which is great.
00:08:46.296 --> 00:08:49.396 A:middle
Now, when you make an update to
your interface, you also want
00:08:49.396 --> 00:08:52.026 A:middle
to make sure that your interface
is also localized as well.
00:08:52.336 --> 00:08:56.736 A:middle
And, we have a command line
tool in OS X; we call it IB12,
00:08:56.736 --> 00:08:59.346 A:middle
which will generate a
strings file for you.
00:08:59.986 --> 00:09:04.726 A:middle
So, in this example here
in my base.Lproj folder,
WEBVTT
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
00:08:59.986 --> 00:09:04.726 A:middle
So, in this example here
in my base.Lproj folder,
00:09:04.726 --> 00:09:08.496 A:middle
I just pass in the nib file that
I have changed, and run IB12
00:09:08.666 --> 00:09:12.656 A:middle
on it, and it will generate a
new strings file containing all
00:09:12.656 --> 00:09:14.436 A:middle
of the strings that
were originally
00:09:14.436 --> 00:09:15.436 A:middle
in this interface file.
00:09:16.536 --> 00:09:20.256 A:middle
I then go in and open
this new strings file,
00:09:21.176 --> 00:09:23.196 A:middle
copy and paste everything
that has changed,
00:09:23.196 --> 00:09:25.636 A:middle
or anything that I have
updated or added, and paste it
00:09:25.636 --> 00:09:27.176 A:middle
into every single strings file
00:09:27.516 --> 00:09:30.236 A:middle
that has this interface
file here,
00:09:30.236 --> 00:09:34.746 A:middle
so it's very good to update.
00:09:35.346 --> 00:09:37.686 A:middle
Now, some issues that can come
up with using auto layout,
00:09:37.686 --> 00:09:40.556 A:middle
is that you may use the
fixed width for auto layout.
00:09:40.926 --> 00:09:43.016 A:middle
This entirely defeats the
purpose of auto layout,
00:09:43.016 --> 00:09:45.086 A:middle
since you want to make sure
00:09:45.086 --> 00:09:47.086 A:middle
that all text is
resized automatically,
00:09:47.086 --> 00:09:49.516 A:middle
and you don't want your
interface to look bad
00:09:49.516 --> 00:09:51.386 A:middle
on certain localization
because you decided
00:09:51.446 --> 00:09:54.136 A:middle
to have a fixed width
between text
00:09:54.136 --> 00:09:56.076 A:middle
and UI text view or something.
00:09:56.656 --> 00:09:59.406 A:middle
And, as always, it's good
00:09:59.406 --> 00:10:02.946 A:middle
to prefer an intrinsic content
size instead and as always
WEBVTT
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
00:09:59.406 --> 00:10:02.946 A:middle
to prefer an intrinsic content
size instead and as always
00:10:02.946 --> 00:10:07.366 A:middle
if you, you should always
try out your layouts
00:10:07.366 --> 00:10:08.876 A:middle
in every single localization
and test,
00:10:08.876 --> 00:10:10.366 A:middle
so your app in those
localizations.
00:10:10.876 --> 00:10:13.186 A:middle
Because what's works
in one language,
00:10:13.186 --> 00:10:15.196 A:middle
and what constraints may
work in one language,
00:10:15.196 --> 00:10:16.616 A:middle
may not necessarily
work in another.
00:10:18.336 --> 00:10:20.546 A:middle
So, let's talk about
the strings file.
00:10:20.896 --> 00:10:23.486 A:middle
The strings file contains
the user visible text
00:10:23.486 --> 00:10:28.006 A:middle
that will get localized
and displayed in your app.
00:10:28.116 --> 00:10:31.386 A:middle
The strings file is placed
into a key value table,
00:10:31.386 --> 00:10:33.296 A:middle
and what happens is,
is that the left side
00:10:33.296 --> 00:10:34.696 A:middle
of the table is your key.
00:10:35.186 --> 00:10:37.316 A:middle
The key is what the application
is going to be looking
00:10:37.316 --> 00:10:40.696 A:middle
for to display what localized
text should be displayed
00:10:40.696 --> 00:10:41.146 A:middle
to the user.
00:10:41.896 --> 00:10:46.156 A:middle
So, in this example here, I have
three localized strings files
00:10:46.156 --> 00:10:48.006 A:middle
that are placed in three
separate localizations;
00:10:48.096 --> 00:10:50.946 A:middle
the English, simplified
Chinese, and Spanish.
00:10:51.716 --> 00:10:54.996 A:middle
At run time, depending on what
localization my user is in,
00:10:55.286 --> 00:10:56.546 A:middle
one of these will get loaded,
00:10:56.546 --> 00:10:57.896 A:middle
and one of these
will get displayed.
00:10:58.196 --> 00:11:03.156 A:middle
So, if my application is looking
for a name key, it will look
WEBVTT
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
00:10:58.196 --> 00:11:03.156 A:middle
So, if my application is looking
for a name key, it will look
00:11:03.156 --> 00:11:05.756 A:middle
in the name field for that
specific localization,
00:11:05.816 --> 00:11:08.086 A:middle
and display whatever is
in the user visible text.
00:11:08.646 --> 00:11:12.626 A:middle
Now, you will also have
some strings in your code
00:11:12.866 --> 00:11:14.586 A:middle
or some user visible
text in your code
00:11:14.586 --> 00:11:15.786 A:middle
that you want localized as well.
00:11:16.496 --> 00:11:18.736 A:middle
To do this, you should
use NSLocalizedString
00:11:18.736 --> 00:11:20.396 A:middle
and use NSLocalizedString
everywhere
00:11:20.396 --> 00:11:22.076 A:middle
where you have user
visible text,
00:11:22.436 --> 00:11:24.746 A:middle
and NSLocalizedString
has many variants
00:11:24.746 --> 00:11:27.256 A:middle
that pretty much can do
what you want it to do,
00:11:27.256 --> 00:11:28.946 A:middle
so check out more details
00:11:28.946 --> 00:11:30.746 A:middle
for NSLocalizedString
in the release notes.
00:11:31.266 --> 00:11:34.676 A:middle
Here's an example of
NSLocalizedString used
00:11:34.676 --> 00:11:36.116 A:middle
in its most common case.
00:11:36.116 --> 00:11:38.776 A:middle
It takes in two parameters;
one is a key,