示例#1
0
        static unsafe public string?[]? StringArrayFromHandle(IntPtr handle)
        {
            if (handle == IntPtr.Zero)
            {
                return(null);
            }

            var c = (int)GetCount(handle);

            if (c == 0)
            {
                return(Array.Empty <string> ());
            }

            var buffer = c <= 256 ? stackalloc IntPtr [c] : new IntPtr [c];

            fixed(void *ptr = buffer)
            CFArrayGetValues(handle, new CFRange(0, c), (IntPtr)ptr);

            string?[] ret = new string [c];
            for (var i = 0; i < c; i++)
                ret [i] = CFString.FromHandle(buffer [i]); }
示例#2
0
        public static string[] GetPreferredLocalizations(string[] locArray)
        {
            if (locArray == null)
            {
                throw new ArgumentNullException("locArray");
            }

            var cfString = new CFString [locArray.Length];

            for (int index = 0; index < locArray.Length; index++)
            {
                cfString [index] = new CFString(locArray [index]);
            }
            using (var cfLocArray = CFArray.FromNativeObjects(cfString))
                using (var cfArray = new CFArray(CFBundleCopyPreferredLocalizationsFromArray(cfLocArray.Handle), true)) {
                    var cultureInfo = new string [cfArray.Count];
                    for (int index = 0; index < cfArray.Count; index++)
                    {
                        cultureInfo [index] = CFString.FromHandle(cfArray.GetValue(index));
                    }
                    return(cultureInfo);
                }
        }
示例#3
0
        public static string[] GetLocalizationsForPreferences(string[] locArray, string[] prefArray)
        {
            if (locArray == null)
            {
                throw new ArgumentNullException("locArray");
            }
            if (prefArray == null)
            {
                throw new ArgumentNullException("prefArray");
            }

            var cfLocal = new CFString [locArray.Length];

            for (int index = 0; index < locArray.Length; index++)
            {
                cfLocal [index] = new CFString(locArray [index]);
            }

            var cfPref = new CFString [prefArray.Length];

            for (int index = 0; index < prefArray.Length; index++)
            {
                cfPref [index] = new CFString(prefArray [index]);
            }

            using (CFArray cfLocalArray = CFArray.FromNativeObjects(cfLocal),
                   cfPrefArray = CFArray.FromNativeObjects(cfPref))
                using (var cfArray = new CFArray(CFBundleCopyLocalizationsForPreferences(cfLocalArray.Handle, cfPrefArray.Handle), true)) {
                    var cultureInfo = new string [cfArray.Count];
                    for (int index = 0; index < cfArray.Count; index++)
                    {
                        cultureInfo [index] = CFString.FromHandle(cfArray.GetValue(index));
                    }
                    return(cultureInfo);
                }
        }
示例#4
0
        public string GetLocalizedString(string key, string defaultValue, string tableName)
        {
            if (String.IsNullOrEmpty(key))
            {
                throw new ArgumentException("key");
            }

            if (String.IsNullOrEmpty(tableName))
            {
                throw new ArgumentException("tableName");
            }

            // we do allow null and simply use an empty string to avoid the extra check
            if (defaultValue == null)
            {
                defaultValue = string.Empty;
            }

            using (CFString cfKey = new CFString(key),
                   cfValue = new CFString(defaultValue),
                   cfTable = new CFString(tableName)) {
                return(CFString.FromHandle(CFBundleCopyLocalizedString(handle, cfKey.Handle, cfValue.Handle, cfTable.Handle), releaseHandle: true));
            }
        }
 public string GetStringValue(string key)
 {
     using (var str = new CFString(key)) {
         return(CFString.FromHandle(CFDictionaryGetValue(Handle, str.Handle)));
     }
 }
示例#6
0
 static internal string?GetFileSystemPath(IntPtr hcfurl)
 {
     return(CFString.FromHandle(CFURLCopyFileSystemPath(hcfurl, 0), true));
 }
示例#7
0
 public override string?ToString()
 {
     return(CFString.FromHandle(CFURLGetString(Handle)));
 }