iPhone multilingual mehrsprachig

localizable strings iPhone XCode

localizable strings iPhone XCode

iPhone Applikationen sind meistens auf einen weltweiten Markt ausgelegt, dabei spielt die Mehrsprachigkeit  eine große Rolle.

Das iPhone SDK bietet dabei eine schöne Möglichkeit dies zu realisieren:

NSLocalizedString(@“TestLocalString“, @“Comment For String“);

Wird überall genutzt wo ein String für den Benutzer ausgegeben werden soll.

Für jede Sprache muss dann eine localized.strings Datei angelegt werden. z.B. en oder de.

Diese legt man so an:

  1. xcode schließen
  2. Drag and duplizieren des settings bundles auf den Desktop (oder irgendwo)
  3. Öffnen des Paketinhalts
  4. Drag Root.strings in den en.lproj Ordner
  5. Duplizieren des en.lproj Ordners und Umbenennung in die gewünschste Sprache (bsp: de)
  6. Ersetzen des alten settings bundle mit dem neuen
  7. XCode öffnen -> die neuen Dateien sollten da sein

Ab dann kann mit den Strings gearbeitet werden. Um die aktuellen Einstellungen des iPhones auszulesen önnen folgende Anweisungen genutzt werden:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *languages = [defaults objectForKey:@“AppleLanguages“];
NSString *currentLanguage = [languages objectAtIndex:0];
NSLog(@“Current language: %@“, currentLanguage);

Ein weiteres nettes Feature ist genstrings. Mit diesem Kommando lassen sich die Stringfiles automatisch erzeugen, indem alle .m Files nach LocalizedStrings durchsucht werden.

genstrings -o de.lproj Classes/*.m

Füllt die de file mit Inhalten (vorsicht, es wird immer komplett überschrieben!)

Links zum Artikel:

http://www.iphonesdkarticles.com/2008/11/localizing-iphone-apps.html

http://discussions.apple.com/thread.jspa?threadID=1694551&tstart=0

Facebook iphone app library three20

320

Der Entwickler der Facebook iPhone App Joe Hewitt hat im Zuge der Erstellung der Applikation daran gemacht, die verwendeten Elemente in eine Library zu vereinen.

Kurz und knapp, hier gibts das Teil.

Das ganze nennt sich Three20 in Anlehnung an die 320 Pixel beim iPhone.

[…]

The name of the new project is Three20, after the 320-pixel-wide screen of the iPhone. The code is all hosted on github for your cloning pleasure. There is an excellent sample app called TTCatalog which lets you play with all of the various UI components. Documentation? Well… there are instructions for how to add Three20 to your project, but I am still working on comprehensive documentation for each of the classes. For now, the sample app and the code itself are your documentation.

[…]

Beschrieben werden alle nutzbaren Klassen mit Beispielen und einer sehr aktiven Google Group

cell.image deprecated use setImage

Wer mit einer UITableView arbeitet, wird auch UITableViewCell nutzen. Bei einer TableViewCell kann in der default Zelle ein Bild (UIImage) gesetzt werden.
Auf den ersten Blick nutzt man einfach

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
UIImage *theimage = [UIImage imageNamed:@"web.jpg"];
cell.image = webimage;

Dies führt aber zu der Fehlermeldung:

„warning: ’setImage:‘ is deprecated (declared at …“

Lösung:

[cell.imageView setImage:[UIImage imageNamed:@"web.jpg"]];

Der Beitrag passt thematisch zu:

http://www.alexanderjaeger.de/cell-text-deprecated-use-cell-textlabel-text/

UITableView

UITableView

UITableView

UITableView ist ein mächtiges Werkzeug zur Darstellung und Verarbeitung von Informationen. Meistens ist die Anwendung, eine View, ein UITableView in dem eine Reihe von Informationen angezeigt werden. Diese Informationen haben dann jeweils unterschiedliche Actions.

Doch nicht immer trifft dieser UseCase ein, bzw. eine Anpassung der UITableViews ist notwendig. Daher wird hier nach und nach eine Sammlung an Tweaks, Tipps und Kniffen rund um UITableView gesammelt werden.

Hier ein paar Tweaks zum Thema UITableView:

Hintergrund Farbe der ganzen TableView ändern

myTableView.backgroundColor = [UIColor redColor];

Mehrere UITableViews in einer View

Wenn in einer UIView mehrere UITableViews geführt werden, so ist es möglicherweise notwendig, jeder TableView eine unterschiedliche ANzahl an Rows zu geben, dies kann folgendermaßen umgesetzt werden:

(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
if (tableView == self.myTableView1) {
return 2;
} else if (tableView == self.myTableView2) {
return 3;
} else {
// wird nie erreicht
}
}

Performancetuning

Hier findet man ne coole Möglichkeit, die Höhe einer Zeile performant zu ändern:

http://iphoneincubator.com/blog/windows-views/the-right-way-to-set-the-height-of-tableviewcells

Links zum Thema

http://www.iphonedevsdk.com/forum/iphone-sdk-development/26739-embed-uitableview-within-uiview.html

http://chris-software.com/index.php/dev-center/tables/

http://pessoal.org/blog/2009/02/25/customizing-the-background-border-colors-of-a-uitableview/

http://blogs.remobjects.com/blogs/mh/2009/04/11/displaying_variably_sized_text_cells_in_

UIButton Text ändern

Der UIButton im iPhone SDK Framwork lässt es zu, den Text je nach „Status“ zu ändern.

[myUIButton setTitle:@“Text1″ forState:UIControlStateNormal];
[myUIButton setTitle:@“Text2″ forState:UIControlStateHighlighted];
[myUIButton setTitle:@“Text3″ forState:UIControlStateSelected];

Natürlich können auch bei allen drei der gleiche Text genutzt werden, um den UIButton wie ein UILabel je nach Content zu benennen.

Der Button muss dazu natürlich als IBOutlet deklariert werden und mit dem entsprechenden UIViewcontroller @synthesize werden.

.h File

@property (nonatomic, retain) IBOutlet UIButton *myUIButton;

.m File

@synthesize myUIButton

Im Interfacebuilder muss das Outlet mit dem Button verbunden werden.

Links zum Thema UIButton:

http://chris-software.com/index.php/dev-center/creating-a-nice-glass-buttons/

Einstellige zweistellige .de domains

Zum Thema neue .de Domains hier eine kleine Einführung und weiter unten eine Übersicht, wie große Hoster mit der Neuerung umgehen, sprich eine Hosterübersicht.

Am 15.10.2009 hat die denic nach einem Urteil folgendes bekannt gegeben:

[…]

  • DENIC eG schafft Einschränkungen bei der Second-Level-Domainregistrierung weitgehend ab
  • Chancengleichheit bei Einführungsphase durch erprobtes „First come – first served“-Prinzip
  • Mehrstufiges Registrierungsverfahren gewährleistet schnelle, sichere und transparente Domainregistrierung

Die DENIC eG wird die aktuellen Domainrichtlinien unter der Top-Level-Domain (TLD) .de dahingehend erweitern, dass künftig auch ein- und zweistellige Domains sowie reine Zifferndomains registriert werden können. Desweiteren werden Domains, die einem Kfz-Kennzeichen oder einer TLD entsprechen, für die Registrierung freigegeben. Das Registrierungsverfahren für die neuen Domains startet am 23. Oktober 2009 9:00 (MESZ). „Die jetzt geschaffenen Veränderungen reduzieren Restriktionen auf ein Minimum“, sagt DENIC- Vorstand Sabine Dolderer (CEO).

[…]

Das Vergabeverfahren der neuen Domains beschreibt die denic folgendermaßen:

[…]

„Da es sich um eine beschränkte Anzahl potenzieller neuer Domains handelt, und weil sich „First come – first served‘ als Verfahren bei der Domainregistrierung bewährt hat, entschieden wir uns bewusst wieder dafür“, begründet Sabine Dolderer die Vorgehensweise bei der Einführung. Im Interesse der Internet Community sollen die Registrierungsaufträge schnell, sicher und vor allem unter Wahrung größtmöglicher Chancengleichheit und Transparenz umgesetzt werden. Die Einführungsphase der neuen Domains beginnt am 23. Oktober 2009 9:00 (MESZ). Der Übergang in den normalen Regelbetrieb erfolgt voraussichtlich ab 26. Oktober 2009.

[…]

Neuerungen:

Für Domains unter der TLD .de gelten ab dem 23. Oktober 2009 folgende Regeln:

  • Auch ein- und zweistellige sowie reine Zifferndomains können jetzt registriert werden.
  • Domains, die einem Kfz-Kennzeichen oder einer TLD entsprechen, sind frei gegeben.
  • Erlaubte Zeichen für Domains sind die Ziffern 0 bis 9, der Bindestrich, die lateinischen Buchstaben a bis z und die weiteren Buchstaben aus der aktuell gültigen Anlage zu den Domainrichtlinien.
  • Eine Domain darf mit einem Bindestrich weder beginnen, noch enden. Auch Bindestriche an dritter und vierter Stelle der Domain sind nicht zulässig.
  • Die Mindestlänge einer Domain liegt bei einem Zeichen.
  • Die Maximallänge einer Domain beträgt 63 Zeichen (bezogen auf den Domain-ACE) – jeweils exklusive .de.

Die denic Mitglieder gehen sehr unterschiedlich mit den Neuerungen um.

1und1 bietet die Möglichkeit der Vorregistrierung, ob diese aber auch für die neuen .de Domains gilt, ist fraglich.

All-inkl.com wird laut E-Mail-Support nicht an der Vorregistrierung teilnehmen.

Manitu, bekannt durch den hostblogger wird auch an der Vergabe nicht teilnehmen.

Domainfactory versteigert die Plätze 2-4 ihrer ersten E-Mail, der erste Slot wird für df.de genutzt werden.

EUserv erhebt 10 Euro Bearbeitungsgebühr je Vorbestellung, unabhängig von Erfolg oder Misserfolg. Bei Erfolg werden 10.000 Euro fällig.

domain24 versteigert den ersten Slot per Ebay.

nepukis.de verlangt für 40 Plätze 24,99 Euro, mehr Plätze werden nicht vergeben.

DenicDirekt nimmt aus Fairnes Gründen nicht an der ersten Phase der Registrierung teil.

Sedo kündigt per Newsletter an, jede der .de Domains zu versteigern, ob sedo diese nun über Partner selbst bekommt oder nach der ersten Phase versucht zu ersteigern ist dabei offen.

Folgende Mitglieder hat die Denic.

Edit:

BasicThinking kam wohl auf die gleiche Idee eine Liste mit Anbietern zu erstellen.

Custom UITableViewCells with Interface Builder

Hier eine gute Anleitung für eigene Tabellenzellen, dem ist nichts hinzuzufügen.

Sowohl komplett „from scratch“ als auch per „Interface Builder“ wird alles erklärt.

Eine Table-Cell kann dann mittels Labels als Outlets mit Informationen gefüllt werden.

Hier ein Video dazu:

iPhone sleep usleep sleepForTimeInterval NSTimer

3 Möglichkeiten eine iPhone Anwendung zu pausieren:

[NSThread sleepForTimeInterval:5];
sleep(5);
usleep(5000000);

Alle 3 Anweisungen bewirken das gleiche Ergebniss, die Anwenudng wird schlafen gelegt. nachteil aller Optionen: die Anwendung wird wirklich unterbrochen, d.h. weitere Schritte sind nicht möglich.

Wenn man die Anweundung nicht komplett pausieren möchte, könnte der NSTimer ein gewünschtes Ergebniss liefern:

- (IBAction)tueEtwas:(id)sender
{
[indicator startAnimation:self];


// tue etwas


[NSTimer scheduledTimerWithTimeInterval:5
target:self
selector:@selector(stopTueEtwas:)
userInfo:nil
repeats:NO];
}


- (void)stopTueEtwas:(id)sender
{
[indicator stopAnimation:self];
[sender invalidate];
}

Das startet einen NSTimer, der nach 5 Sekunden eine Methode aufruft.

sleep();

usleep();

UISwitch Beispiel

UISwitch

UISwitch

UISwitch ist ein relativ einfaches Objekt. Es hat zwei Zustände: On und Off. Diese können abgerufen werden.

Um ein UISwitch zu nutzen, wird über den Interface Builder ein UISWitch in die Oberfläche gezogen. Im entsprechenden Controller ein Outlet anlegen:

.h File:
[...]IBOutlet UISwitch *mySwitcher;[...]

Zusätzlich noch eine Property:

@property (nonatomic, retain) IBOutlet UISwitch *mySwitcher;

.m File
@synthesize mySwitcher;

Implementierung:

if (mySwitcher.on) NSLog(@"switch Status: on");
else NSLog(@"switch Status: off");

Abschließend noch im Interface Builder die Verbindung zwischen Outlet und dem eigetlichen UIElement herstellen, fertig.

via: chris-software

Gutscheinbuch Schlemmerblock

Heute startet eine neue Internetseite durch:

Das Gutscheinbuch Schlemmerblock Informationsportal.

Dort wird über Gutscheinbücher und  Schlemmerblöcke in ganz Deutschland informiert. Einfaches Layout und schnelle Ladezeiten zeichnen die Seite aus. Man darf gespannt sein, was aus dieser Seite wird.

An dieser Stelle noch ein Hinweis auf folgende Aktion:

Schlemmerblock 2009 kostenlos