QString i18n(const char *singular, const char *plural, unsigned long n) { if (!singular || !singular[0] || !plural || !plural[0]) return QString::null; char *newstring = new char[strlen(singular) + strlen(plural) + 6]; sprintf(newstring, "_n: %s\n%s", singular, plural); QString r = i18n(newstring); delete [] newstring; initPlural(); if ( r.isEmpty() || plural_form == -1) { NoTranslate: if ( n == 1 ) return put_n_in( QString::fromUtf8( singular ), n ); else return put_n_in( QString::fromUtf8( plural ), n ); } QStringList forms = QStringList::split( "\n", r, false ); switch ( plural_form ) { case 0: // NoPlural EXPECT_LENGTH( 1 ); return put_n_in( forms[0], n); case 1: // TwoForms EXPECT_LENGTH( 2 ); if ( n == 1 ) return put_n_in( forms[0], n); else return put_n_in( forms[1], n); case 2: // French EXPECT_LENGTH( 2 ); if ( n == 1 || n == 0 ) return put_n_in( forms[0], n); else return put_n_in( forms[1], n); case 3: // Gaeilge EXPECT_LENGTH( 3 ); if ( n == 1 ) return put_n_in( forms[0], n); else if ( n == 2 ) return put_n_in( forms[1], n); else return put_n_in( forms[2], n); case 4: // Russian, corrected by mok EXPECT_LENGTH( 3 ); if ( n%10 == 1 && n%100 != 11) return put_n_in( forms[0], n); // odin fail else if (( n%10 >= 2 && n%10 <=4 ) && (n%100<10 || n%100>20)) return put_n_in( forms[1], n); // dva faila else return put_n_in( forms[2], n); // desyat' failov case 5: // Polish EXPECT_LENGTH( 3 ); if ( n == 1 ) return put_n_in( forms[0], n); else if ( n%10 >= 2 && n%10 <=4 && (n%100<10 || n%100>=20) ) return put_n_in( forms[1], n); else return put_n_in( forms[2], n); case 6: // Slovenian EXPECT_LENGTH( 4 ); if ( n%100 == 1 ) return put_n_in( forms[1], n); // ena datoteka else if ( n%100 == 2 ) return put_n_in( forms[2], n); // dve datoteki else if ( n%100 == 3 || n%100 == 4 ) return put_n_in( forms[3], n); // tri datoteke else return put_n_in( forms[0], n); // sto datotek case 7: // Lithuanian EXPECT_LENGTH( 3 ); if ( n%10 == 0 || (n%100>=11 && n%100<=19) ) return put_n_in( forms[2], n); else if ( n%10 == 1 ) return put_n_in( forms[0], n); else return put_n_in( forms[1], n); case 8: // Czech EXPECT_LENGTH( 3 ); if ( n%100 == 1 ) return put_n_in( forms[0], n); else if (( n%100 >= 2 ) && ( n%100 <= 4 )) return put_n_in( forms[1], n); else return put_n_in( forms[2], n); case 9: // Slovak EXPECT_LENGTH( 3 ); if ( n == 1 ) return put_n_in( forms[0], n); else if (( n >= 2 ) && ( n <= 4 )) return put_n_in( forms[1], n); else return put_n_in( forms[2], n); case 10: // Maltese EXPECT_LENGTH( 4 ); if ( n == 1 ) return put_n_in( forms[0], n ); else if ( ( n == 0 ) || ( n%100 > 0 && n%100 <= 10 ) ) return put_n_in( forms[1], n ); else if ( n%100 > 10 && n%100 < 20 ) return put_n_in( forms[2], n ); else return put_n_in( forms[3], n ); } return QString::null; }
QString i18n(const char *singular, const char *plural, unsigned long n) { if (n == 1) return put_n_in(QObject::tr(singular), n); return put_n_in(QObject::tr(plural), n); }